super
调用父类属性
class Person{
String name="gcs";
}
class Student extends Person{
String name="lh";
public void test(String name){
System.out.println(name);//传入的值
System.out.println(this.name)//该类的属性值
System.out.println(super.name)//父类的属性值
}
}
调用父类的方法
class Person{
public void print(){
System.out.println("Person");
}
}
class Student extends Person{
public void print(){
System.out.println("Student");
}
public void test(){
this.print();//打印出Person
super.print();//打印出Student
}
}
调用父类构造方法
class Person{
public Person(){
System.out.println("person");
}
public Person(String name){
}
}
class Student extends Person{
public Student{
//会打印出Person和Student
//因为在执行下面语句前默认执行了super()
System.out.println("Student");
}
//如果父类只有有参构造方法,那么子类就必须也是有参构造
//或者向下面一样向父类传入参数
public Student(){
//向父类传入参数
super("name");
}
}
static
静态属性和静态方法是和类一起加载的,当类加载完毕,静态方法加载完毕,而非静态方法是和对象实例一起加载的,只有实例化对象才可调用非静态方法
静态属性
class Person{
static String name;
String sex;
public void main(String[] args){
//静态属性和方法可以直接被调用
name = "gcs";
//非静态属性和方法必须要实例对象才能调用
Person person = new Person();
person.sex = "man";
}
}
静态方法
class Person{
public void test1(){
System.out.println("Person1");
}
public static void test2(){
System.out.println("Person1");
}
}
class Student extends Person{
//非静态方法可以被子类重写
@Override
public void test1(){
System.out.println("Student1");
}
//静态方法不可以被子类重写
public static void test2(){
System.out.println("Student2");
}
}
class Test{
public void main(String[] args){
//子类调用和父类同名静态方法时会执行父类静态方法
Person p1 = new Person();
Person p2 = new Student();
p1.test1();//输出Person1
p2.test1();//输出Student1
p1.test2();//输出Person2
p2.test2();//输出Person2
}
}