继承与多态
1.继承的使用
class 子类名 extends 父类名{
类体
}
java支持单继承,即只能有一个父类,但类之间的继承可以具有传递性。
子类可以通过继承自动获得父类中访问权限为public、protected、default的成员变量和方法,但不能继承权限为private的成员变量和方法。
2.方法重载和方法覆盖
方法重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
方法覆盖:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法
public class People { public String getName() { return "people"; } } public class Student extends People { public String getName() { return "student"; } } public static void main(String[] args) { People p=new People(); System.out.println(p.getName());//运行结果为people Student s=new Student(); System.out.println(s.getName());//运行结果为student People pp=new Student(); System.out.println(pp.getName());//运行结果为student }
student类的getName方法成功覆盖了父类的方法
如果想在子类中访问父类中国被覆盖的成员,可以使用关键字super来解决这一问题。如super.成员变量 或 super.成员方法。
当局部变量和类的成员变量同名时,成员变量被隐藏。
this.day=day; //this用于表示当前变量,如果没有,左右的day均为局部变量。
3.对象间的类型转换
java支持父类和子类对象之间的类型转换,将子类对象抓换为父类时,可进行显式转换或隐式转换,将父类对象转换为子类对象,必须进行显式转换。
a=(A)b; //显式转换
aa=b; //隐式转换
4.多态性
A a=new B();
等价于下面两个子句:
B b=new B();
A a=b; //隐式类型转换
这里子类重写了父类的方法,所以调用子类B的方法,不然调用父类A的方法。
5.抽象类和抽象方法
关键字abstract修饰的类称为抽象类,抽象类是一种没有完全实现的类。不能用它来实例化任何对象。
抽象类可以含有抽象的方法,用abstract修饰,除方法体外都有。
6.接口是抽象类的一种变体,,但它与抽象类又有一些差异,关键字为interface。
具体不同:
(1)抽象类中的方法不一定都是抽象的,而接口中的所有方法都是抽象的。
(2)接口中的所有数据都是公有静态常量,即具有public,static,final属性,但一般不写这些修饰符。
(3)因为接口中的所有方法都是抽象的,public的,因此必须在实现该接口的子类中重写这些方法。、
例如:
interface Myinter{
double g=9.8; //public static final double g=9.8;
void show(); //public abstract void show();
}
7.接口实现
由接口生成子类通过关键字implements来实现一个接口。
根据上节定义的接口Myinter,可以定义类Test:
class Test implements Myinetr{
public void show(){
System.out.println("g="+g);
}
}
与类之间的继承关系相似,接口之间也可以通过关键字extends进行继承,但其中的抽象方法不能被具体实现。