继承与接口实现
- 1:继承
-
1.1:继承是类与类之间、接口与接口的关系
-
1.2 继承的内容:
- 1.2.1 子类继承父类所有的。
- 1.2.2 可以继承的内容:
- 与对象相关的:
- 属性: 继承
- 方法: 继承
- 构造方法: 子类 父类的构造方法会一起调用
- 构造代码块: 子类以及父类的构造代码块都会调用
- 静态资源部分:
- 静态属性:类名直接调用 子类也可以调用 共用同一份
- 静态方法:子类可以直接调用
- 静态代码块: 类被加载时执行唯一的一次
- 以上所有代码如果受到访问权限限制: 比如 private protected 缺省不写,都继承了,但是不能直接调用。 还可以通过其他公共的方法进行访问
- 与对象相关的:
-
1.3:子类可重写父类方法:
- 1.3.1 该方法访问方式不可受限制(访问权限 final)
- 1.3.2 方法重写的格式除方法体以外都与父类保持一致
- 1.3.3 子类优先调用已经重写的方法
- 1.3.4 子类要调用已经继承的父类的属性、方法,可以用super()调用。
public class Student { ///创建父类
private String name;
public Student(String name) {
this.name = name;
}
public Student() {
System.out.println("父类构造方法");
}
public void setName(String name) {
this.name = name;
}
}
class UNStudent extends Student {///子类继承父类的格式
public void cet() {
}
public UNStudent(String name) {
super(name);/// 调用父类的构造方法
}
public UNStudent() {
System.out.println("子类构造方法");
}
}
- 1.4:类型转换
- 一个对象可以有多个类型,它本类以及其父系类。只不过每种类型表示抽象范围不一样
- 子类的对象可以自动转型成父类的对象,这个对象在属于父类类型时,不能调用原先子类新增的成员变量和方法
- 父类可强制转型成子类的对象,但强制转型并不安全,需要判断下类型是否匹配(用instanceof判断)
///延用先前创建的类
class Main {
public static void main(String[] args) {
UNStudent unStu = new UNStudent("123");
Student stu1 = unStu;///此时stu1不可调用子类cet()方法
UNStudent unstu1 = (UNStudent) stu1;
unstu1.cet();
if (stu1 instanceof UNStudent)
UNStudent unstu1 = (UNStudent) stu1;
System.out.println("stu2 是 UNStudent 类型");
}///强制转型判断类型是否匹配的方法
}
- 2:实现(相当于一种另类的继承)
- 2.1:实现是类与接口之间的关系(一个类可以实现多个接口)
- 类需要实现接口
- 类中需要重写接口的所有方法
- 这个类相当于这个接口的子类
- 这个类创建的对象可以自动转型为接口类型
public class LoginListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
class main {
public static void main(String[] args) {
LoginListener l = new LoginListener();
///addActionListener (ActionListener al);
btn.addActionListener(l);///自动转型
}
}
tionListener (ActionListener al);
btn.addActionListener(l);///自动转型
}
}