前言:对于类的继承,多态,接口等进行总结,可以使得代码的实现更加多样化,更加方便,不用每一个都去重写一遍
1.对于接口,可以说是继承的一种,只不过更加特殊,因为他要对接口里面的抽象方法进行重写,用实现这个词更加合适,然后需要用到关键词implements.
依旧以学生类为例:
java
public interface IStudent {
public static final String name = "XX";
public void study();//抽象方法
}
public class Student implements IStudent{
private int score;
public Student(int score){
this.score = score;
}
public Student(){
}
public void setScore(int score){
this.score = score;
}
public int getScore(){
return score;
}
//实现接口中的抽象方法
public void study(){
System.out.println(name+"正在学习!");
}
}
2.关于1.中的static,final.
1.static表示多个变量,可以同时共用同一个变量,并且都可以修改他,并且该值也是共享的。
2.final表示固定这个量,便不可以再修改
3.对于继承,子类继承父类,需要用到关键词extends,格式为,子类 extends 父类
java
public class Student implements IStudent{
private int score;
public Student(int score){
this.score = score;
}
public Student(){
}
public void setScore(int score){
this.score = score;
}
public int getScore(){
return score;
}
//实现接口中的抽象方法
public void study(){
System.out.println(name+"正在学习!");
}
}
public class UNStudent extends Student{
//在子类的构造方法中一定要调用一次父类的构造方法
//父类的无参构造方法会被默认调用
public void print(){
System.out.println("学分:"+getScore());
}
public void study(){
System.out.println("子类重写父类中的方法");
}
}
1.继承可以继承父类的所有属性和方法,但是构造函数不会被继承,继承的目的是为了重写父类中的抽象方法,便于后续的优化使用,并且可以使方法功能更加多样,更符合要求
2.如果父类自定义了构造方法,那么子类的构造方法必须调用父类的构造方法,使用关键词super,其他函数也是如此,要先调用其对应的父类的方法
java
public void study(){
super.study();
System.out.println("子类重写父类中的方法");
}
注意:方法重写的要求:1.有继承关系的两个类之间
2.返回值类型,方法名,参数类型(个数,顺序)完全一样
3.关于自动转型和强制转型,自动是子类转父类,强转是父类转子类
1.自动转型
java
UNStudent un = new Student();
un.study();
这个un对像是父类对象,并且在调用函数时,优先看这个函数是否在父类被定义,其次实现的功能是子类的
2.强转
java
UNStudent stu = (UNStudent)un;
stu.print();
这个stu对象是子类对象,并且该转型的前提是,这个un本身是自动转型的产物
4.多态,在调用方法时,可以处理给他父类对象,也可是子类对象,这里便是自动转型的运用。
java
Teacher t = new Teacher();
t.teach(un);