父类和子类
子类到父类称为抽象(泛化)
父类到子类称为特化
1.继承关系下的构造方法
super:
默认调用的,如果不提供,默认提供,如果提供了,必须在第一行;
super和this都用作调用构造方法时不能同时使用
1)在子类构造方法中调用父类的构造方法
2)在子类中访问父类成员
2.覆盖(@override 覆盖的标注,如果不符合覆盖原则的规范,则会报错)
(static,private,属性,不能有覆盖)
1)方法名必须一样
2)参数表一样
3)返回值类型要么一样,要么子类方法的返回值类型是父类方法返回值类型的子类
4)权限修饰符要么一样,要么子类的权限范围要大于父类方法的权限范围
5)异常
6)当用父类的引用去调用方法时:
如果用父类的引用操作子类对象且调用方法,时
看父类有没有这个方法
如果有:
如果没有:不能编译
首先看子类有没有覆盖父类的方法,如果有覆盖,就调用子类的方法;
如果没有,则调用父类的方法
Object:equals方法,比较的是地址
String:重写了Object,equals方法比较的是对象的内容(==比较的是地址)
String str = "11";
String str1 = "11";
String str2 = new String(11);
str.equals(str1);//true
str.equals(str2);//true
str == str1;//true(共享字符串池中的“11”)
str == str2;//false
3.static
静态属性,该类型的所有对象共用一份,且可以用类名直接访问(权限够)
非静态属性,该类型的所有对象各有一份
非静态方法,不仅可以访问静态成员,还可以访问非静态成员
静态方法仅能访问静态成员;
凡是被static修饰的成员,统称为类级别成员
凡是非静态成员统称为对象级成员
4.final
1)修饰属性(常量)
2)修饰方法,凡是被final修饰的非静态方法不能重写(覆盖)
3)修饰类(没有子类),例如 String
5.多态
第一阶段:Animal a = new Tiger(); 最低级的多态使用方式
第二阶段:使用参数来保证多个子类匹配 instanceof 或者 getClass, getClass比instanceof优秀点 举例多态1 Dinner
第三阶段:使用反射机制对入口方法进行耦合度的降低 举例duotai2 Car
6.抽象类(abstract)(抽象类或者父类相当于一个接口,只是比接口多了属性。
(接口仅是一个行为))
1)抽象类不一定有抽象方法
2)有抽象方法的类,一定是抽象类(抽象方法不允许有方法体)
3)继承抽象类的子类要么必须实现抽象类中的所有方法,要么就将子类变成抽象类
三个角色:
1)接口定义者
2)接口实现者
3)接口使用者
注意:
1)类之间的继承只能是单继承;
2)接口之间的继承可以是多继承;
public interface A {}
public interface B {}
public interface Interface extends A,B{
//相同效果
int a = 3;
//final int a = 3;
//static final int a = 3;
//public static final int a = 3;
void fun();//public absract void fun();
}
3)类与接口之间可以是多继承
7.接口
接口中定义的属性(一定是:public static final 修饰的,int a = 3;
等同于public static final int a = 3;)
接口定义的方法(一定是public abstract 修饰的void run();
等同于public abstract void run();)