//举例向下转型:
public class Person {
public void eat(){
System.out.println("吃饭");
}
}
class Student extends Person{
@Override
public void eat() {
System.out.println("学生爱吃麻辣烫");
}
public void talkLove(){
System.out.println("学生会谈恋爱"); //子类的特有方法
}
}
class Test {
public static void main(String[] args) {
Person p = new Student();//多态的格式
p.eat();
Student s= (Student) p;//向下转型
s.talkLove();
}
}
抽象类 abstract
抽象类:一个没有方法体的方法定义为抽奖方法,可修饰类和方法。
抽象类的特点:
抽象类不能直接实例化。
抽象类中可有成员变量,也可有定义常量。
抽象类中存在构造方法,为了子类初始化它。
如果一个类中,有抽象方法,此类一定为抽象类。
抽象类中,可以有抽象方法,也可以有非抽象方法。
抽象类子类,要么也是一个抽象类,要么就把抽象类父类方法全部重写。
抽象类带有强制性,子类必须重写;非抽象方法,不带有强制性,子类一般继承下去用,也可以重写。
抽象类的成员特点:
成员变量:
既是变量,也可以是常量
构造方法:
用于子类访问父类数据的初始化
成员变量:
既可以是抽象的,也可以是非抽象的
抽象类的成员方法特性:
抽象方法:
强制子类的做的事情
非抽象方法
子类继承的事情,提高代码复用性
接口 interface
接口:与类同级别,接口经常用来定义一些额外的扩展功能;接口中只能定义抽象方法。
接口成员特点:
成员变量:
只能是常量,并且是静态常量 public static final
构造方法:
接口没有构造方法
成员方法:
只能是抽象方法
抽象类与接口用implements连接,如下:
public abstract class A {
public abstract void show();
}
class B extends A implements C{
@Override
public void show() {
}
@Override
public void bigshow() {
}
}
interface C{
public abstract void bigshow();
}
class Test{
public static void main(String[] args) {
A an = new B();
an.show();
((B) an).bigshow();
}
}