本文共 2431 字,大约阅读时间需要 8 分钟。
某一个事物,在不同时刻表现出来的不同状态。
父 f = new 子();
提高了代码的维护性(继承保证)
提高了代码的扩展性(由多态保证)
不能使用子类特有的功能
注意:如果需要使用子类 可以把父类的引用强制转换为子类的引用。(向下转型)
举例:public class MyTest { public static void main(String[] args) { Animal an = new Dog(); an.eat(); Dog dog=(dog) Animal; dog.lookdoor(); an=new Cat(); an.eat(); }}class Animal{ public void eat(){ System.out.println("吃饭");}}class Cat extends Animal{ @Override public void eat() { System.out.println("吃小鱼干");}}class Dog extends Animal{ @Override public void eat() { System.out.println("狗吃骨头");} public void lookdoor(){ System.out.println("狗看门");}}
两个类都继承于一个父类,但这两个类之间没有继承关系,当进行类型转换时会出现类型转换异常(java.lang.classCastException)
如何避免以上问题:使用instance of运算符
格式:(引用 instance of 数据类型名)结果:布尔类型true:表示引用所指向的对象是一个指定的数据类型false:不是指定的类型
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类格式: abstract class 类名 { }
抽象方法格式: public abstract void eat();
为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现。
interface 接口名 { }
class 类名 implements 接口名 { }
a:类与类:
继承关系,只能单继承,可以多层继承。 b:类与接口: 实现关系,可以单实现,也可以多实现。 并且还可以在继承一个类的同时实现多个接口。 c:接口与接口: 继承关系,可以单继承,也可以多继承。
public class MyTest { public static void main(String[] args) { }}class Cat implements Fireinterface { public void eat() { } @Override public void fire() { System.out.println("猫学会了钻火圈"); }}class Dog implements Fireinterface{ @Override public void fire() { System.out.println("狗学会了钻火圈"); }}public interface Fireinterface { public abstract void fire();}``
转载地址:http://gbfki.baihongyu.com/