-
方法的覆盖原则
- 子类和父类的名字必须相同,不然不叫覆盖
- 判断是否实现覆盖:在有@Override后,如果覆盖内容不报错,说明已经实现
- 方法的覆盖,这时父类和子类的名字必须相同。
- 父类和子类返回值类型必须相同
- 父类和子类的签名(方法名+参数)必须相同
- 子类必须比父类的访问权限相同或者比父类的访问权限大。
-
在调用方法时会先去访问子类(本类),然后去访问父类。
-
只有方法有覆盖的概念,而字段没有。
-
super是直接到父类中找对应的方法。
而且使用super时,子类是指的是本类,并且不能嵌套使用。
而且调用super()必须在父类中创建一个构造器。 -
继承的内存分析
jvm虚拟机会先加载父类的对象到内存中,再加载子类的。在子类中创建对象后,会先执行父类中的构造器 -
super不可以被打印,this可以被打印,因为this代表的是内存地址
-
super();放在第一行
-
一个文件中有多个类时,main方法一定是放在有public的和文件名相同的类中的
-
super();和this();不可以在一起使用(因为两者都必须放在第一行)
-
当父类中的某些字段被私有化后需要在父类中创建构造器和子类中调用super()方法来传参,
若仍想用System.out.println();方法来访问被私有化的字段,要在父类中添加getset方法,并且打印时也要变成(对象名称.getName());
class Animal{
private String name;
private int age;
Animal(String name,int age){
this.name=name;
this.age =age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Dog extends Animal {
String color;
Dog(String color){
super("wc",10);
this.color= color;
}
public static void main(String[] args) {
Dog d=new Dog("白色");
System.out.println(d.color);
System.out.println(d.getName());
System.out.println(d.getAge());
}
}
- 字段的隐藏
- 当子类和父类中出现一样的字段时,this指的是子类的,super指的是父类的
- 使用this时会先在子类中寻找指定的内容,如果没有才会去父类中再找,如果父类中有所寻找的字段,则会查看是否允许继承。
- 子类和父类中有相同名称的静态方法时,对象名.静态方法名(相当于子类名.静态方法名)调用的是子类中的方法,要调用父类的方法:父类名.静态方法名
12.方法的隐藏
当子类与父类中有相同的静态方法时,叫方法的隐藏