接口与多态

在Java中所有类都是从Object这个类继承出来的

在面向对象基础案例中  Animal  虽然是“最顶级”的父类,但其实Object是所有类的父类

而Dog类 cat类  这样实际上是通过Animal来继承对象

另外  对象名.getClass() 可以获得此对象是从哪初始化的

Object并不是抽象类,因为它可以被所有类继承下来的方法都是先程序代码,所以没有必须被覆盖的方法

任何从ArrayList<Object>取出的东西都会被当做Object类型的引用而不管它原来是什么

  例如:

1 ArrayList<Object> myDogArrayList  = newArrayList<Object>();
2 Dog aDog = new Dog();
3 myDogArrayList.add(aDog) 
4 
5 //取出来的时候
6 Dog d = myDogArrayList.get(0)  //报错  因为<object>

这样代码会报错,编译器无法确认它是Dog

如果我们在Animal中声明abstract(抽象)方法,那么所有的子类都得重写

在设计中会遇到这样一个问题    animal  有很多子类   其中有一批是兔子 猫等等  另一批是老虎.狮子    如果我们想给兔子,猫等加入一个play()的方法,一个个添加太麻烦,如果加到animal中,狮子和老虎怎么能接受呢? 这时候需要设计一个接口来实现了

 1 public interface pet{
 2   public abstract void play();   //接口的方法一定是抽象的,所以必须以分号结束,记住它们没有内容
 3 }
 4 
 5 
 6 //.........
 7 
 8 
 9 public class cat extends animal implement pet{
10   public void play(){......}
11   public void eat(){......}  //一般的覆盖方法     
12 }

这样兔子猫都有animal中的方法也有了它们自己共同的方法

原文地址:https://www.cnblogs.com/qiuyehaha/p/13022016.html