第三节 类的继承
1 类的继承
1.1 类继承的作用:免去重写代码的烦恼 单根继承
继承了父类中属性与方法,子类内还可以再定义它自己所特有的方法。
1.2 类继承的结构:访问限定符 class 子类名 extends 父类名{}
如:public class UNStudent extends Student {}
1.3 方法的重写:子类重写父类中的方法,保持方法的定义不变,但方法内部实现同父类中不同(子类可以重写父类的方法也可以不重写,而实现接口的类必须重写接口中的方法)
子类的对象到底调用父类中的方法还是子类的方法:如果子类重写了父类中的方法,调用的就是子类中的实现,否则就调用父类中的方法
1.4自动转型:指的是子类对象会自动转变为父类类型(反过来不可以)
如: Student uns=new UNStudent();
如果子类重写了父类中的方法,调用的就是子类中的实现,否则就调用父类中的方法。如 uns.study();(UNStudent中重写的study())
当子类对象自动转型为父类类型时,通过父类类型变量的引用,只能调用己在父类中定义的方法,不能调用子类中自己的方法。
1.5 多态:同一类型的对象,但在具体调用时,由与继承与重写机制,方法执行的结果不同
如:
public void teacStu(Student st1,Student st2){
st1.study();
st2.study();
}
public static void main(String[] args) {
//父类类型变量名用来引用子类对象
Student us=new UNStudent();
us.setName("我是大学生");
Student cs=new ComStudent();
cs.setName("计算者");
//创建一个老师对象
Teacher tc=new Teacher();
//传入两个学生对象
tc.teacStu(us, cs);
}
2 接口的使用
2.1类是对所有对象所共有的方法和属性的定义,定义一个类无非是两个用途:或者生成对象调用其方法,或者用作给其它类来继承。
2.2接口的定义:要求子类必须重写父类中的方法 ,接口中也可以什么都不定
不能直接使用接口创建对象
结构 public interface 接口名{
public static final 属性类型=一个常量;//必须赋值常量,不可再变
Public abstract void 方法名();//无方法体 结尾注意为;
}
2.3 接口的实现 implements 接口也可称做实现类的父类,实现类对象自动转型为接口类型,多态机制同子父类继承时是同样的原理。
public class ImpOval implements NetJavaShape {
//实现接口中的方法
public void draw(int x1,int y1,int x2,int y2){
System.out.println("我画的是圆形!");
//接口中的属性定义可做为常量使用
System.out.println("出品人: "+NetJavaShape.compName);
}
}
一个类可以实现多个接口 public class ImpOval implements NetJavaShape,OtherShape{}
ImpOval类的对象即可以是NetJavaShape的,也可以是OtherShape类型的。
当一个类实现多个接口,自动转为某个接口类型时,就只能调用在其接口中定义的方法。
2.4接口的继承 extends 一个接口同样可以继承多个接口
3抽象类的使用
3.1 抽象类的定义:抽像类是介与接口和类之间的定义:抽像类中,可以定义己实现的方法,也可以定义像接口中没有实现的方法---继承的子类就必须实现。
public abstract class ABSShape {
//抽像方法定义:继承的子类必须实现
public abstract void draw();
//可以定义己实现的方法
public void setColor(int c){
this.color=c;
}
public int getColor(){
return this.color;
}
private int color;
}
抽像类中定义的方法,如没有实现,前面就必须加上abstract关键字,即抽像方法。
字类中,必须实现抽象类中的abstract方法
子类只能同时继承一个抽象类,这于接口的implements不同。
3,2 抽象类的使用:抽像类也不能直接创建对象。抽像类的做用常用做“适配器”----因为如果无论一个接口中定义有多少方法,子类都必须实现。先抽象类重写接口中的所有方法(可以写成空的方法 所有方法后面加{}而不是;),而继承一个抽象类不一定重写所有方法只写自己需要的就可以。