由此可见:
A:具体类多态(几乎没有)
B:抽象类多态(常用)
C:接口多态(最常用)
<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">定义动物培训接口,这里没有class
<span style="color: #0000ff;">interface<span style="color: #000000;"> AnimalTrain {
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract <span style="color: #0000ff;">void<span style="color: #000000;"> jump();
}
<span style="color: #008000;">//<span style="color: #008000;">抽象类实现接口
<span style="color: #0000ff;">abstract <span style="color: #0000ff;">class Dog <span style="color: #0000ff;">implements<span style="color: #000000;"> AnimalTrain {
}
<span style="color: #008000;">//<span style="color: #008000;">具体类实现接口
<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">implements<span style="color: #000000;"> AnimalTrain {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> jump() {
System.out.println("猫可以跳高了"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">AnimalTrain是抽象的; 无法实例化
<span style="color: #008000;">//<span style="color: #008000;">AnimalTrain at = new AnimalTrain();
<span style="color: #008000;">//<span style="color: #008000;">at.jump();
<span style="color: #000000;">
AnimalTrain at = <span style="color: #0000ff;">new<span style="color: #000000;"> Cat();
at.jump();
}
}
所有的类都默认继承自一个类:Object。
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。
num = 10 num2 = 20 num3 = 30;</span><span style="color: #ff0000;">//错误: 需要<标识符>。接口没有构造方法。
</span><span style="color: #008000;">//</span><span style="color: #008000;"> public Inter() {}
</span><span style="color: #ff0000;">//接口方法不能带有主体
</span><span style="color: #008000;">//</span><span style="color: #008000;">public void show() <span style="color: #ff0000;">{}
</span></span><span style="color: #008000;">//</span><span style="color: #008000;">abstract void show(); </span><span style="color: #008000;">//</span><span style="color: #008000;">默认public</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> show(); <span style="color: #ff0000;">//默认abstract。只能是抽象方法。默认修饰符:public abstract</span>
<span style="color: #000000;">}
<span style="color: #ff0000;">//接口名+Impl这种格式是接口的实现类格式
/<span style="color: #008000;">
class InterImpl implements Inter {
public InterImpl() {
super();
}
}
<span style="color: #008000;">/
<span style="color: #0000ff;">class
InterImpl <span style="color: #0000ff;">extends Object <span style="color: #0000ff;">implements<span style="color: #000000;"> Inter {
<span style="color: #0000ff;">public<span style="color: #000000;"> InterImpl() {
<span style="color: #0000ff;">super<span style="color: #000000;">();
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {}
}
<span style="color: #008000;">//<span style="color: #008000;">测试类
<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Inter i = <span style="color: #0000ff;">new<span style="color: #000000;"> InterImpl();
System.out.println(i.num);
System.out.println(i.num2);
<span style="color: #008000;">//<span style="color: #008000;">i.num = 100;
<span style="color: #008000;">//<span style="color: #008000;">i.num2 = 200;
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(i.num); <span style="color: #ff0000;">//无法为最终变量num分配值。只能是常量,并且是静态的。
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(i.num2);<span style="color: #008000;">//<span style="color: #008000;">无法为最终变量num2分配值
<span style="color: #000000;"> System.out.println(Inter.num);
System.out.println(Inter.num2);
System.out.println("--------------"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">interface<span style="color: #000000;"> Mother {
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract <span style="color: #0000ff;">void<span style="color: #000000;"> show2();
}
<span style="color: #0000ff;">interface Sister <span style="color: #0000ff;">extends<span style="color: #000000;"> Father,Mother {
}
<span style="color: #008000;">//<span style="color: #008000;">class Son implements Father,Mother <span style="color: #008000;">//<span style="color: #008000;">多实现
<span style="color: #0000ff;">class Son <span style="color: #0000ff;">extends Object <span style="color: #0000ff;">implements<span style="color: #000000;"> Father,Mother {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
System.out.println("show son"<span style="color: #000000;">);
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show2() {
System.out.println(</span>"show2 son"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo3 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Father f = <span style="color: #0000ff;">new<span style="color: #000000;"> Son();
f.show();
<span style="color: #008000;">//<span style="color: #008000;"> f.show2(); <span style="color: #008000;">//<span style="color: #008000;">报错
<span style="color: #000000;">
Mother m = <span style="color: #0000ff;">new<span style="color: #000000;"> Son();
<span style="color: #008000;">//<span style="color: #008000;">m.show(); <span style="color: #008000;">//<span style="color: #008000;">报错
<span style="color: #000000;"> m.show2();
}
}
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
分析:从具体到抽象
猫:
姓名,年龄
吃饭,睡觉
狗:
姓名,年龄
吃饭,睡觉
由于有共性功能,所以,我们抽取出一个父类:
动物:
姓名,年龄
吃饭();
睡觉(){}
猫:继承自动物
狗:继承自动物
跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口
接口:
跳高
部分猫:实现跳高
部分狗:实现跳高
实现;
从抽象到具体
使用:
使用具体类
<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">定义跳高接口
<span style="color: #0000ff;">interface<span style="color: #000000;"> Jumpping {
<span style="color: #008000;">//<span style="color: #008000;">跳高功能
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract <span style="color: #0000ff;">void<span style="color: #000000;"> jump();
}
<span style="color: #008000;">//<span style="color: #008000;">定义抽象类
<span style="color: #0000ff;">abstract <span style="color: #0000ff;">class<span style="color: #000000;"> Animal {
<span style="color: #008000;">//<span style="color: #008000;">姓名
<span style="color: #0000ff;">private<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Animal() {}
</span><span style="color: #0000ff;">public</span> Animal(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setName(String name) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">吃饭(); -- 抽象</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">abstract</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> eat();
</span><span style="color: #008000;">//</span><span style="color: #008000;">睡觉(){}</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> sleep() {
System.out.println(</span>"睡觉觉了"<span style="color: #000000;">);
}
}
<span style="color: #008000;">//<span style="color: #008000;">具体猫类
<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public<span style="color: #000000;"> Cat(){}
</span><span style="color: #0000ff;">public</span> Cat(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">super</span><span style="color: #000000;">(name,age);
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">重写抽象那个方法</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> eat() {
System.out.println(</span>"猫吃鱼"<span style="color: #000000;">);
}
}
<span style="color: #008000;">//<span style="color: #008000;">具体狗类
<span style="color: #0000ff;">class Dog <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public<span style="color: #000000;"> Dog(){}
</span><span style="color: #0000ff;">public</span> Dog(String name,age);
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">重写抽象那个方法</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> eat() {
System.out.println(</span>"狗吃肉"<span style="color: #000000;">);
}
}
<span style="color: #008000;">//<span style="color: #008000;">有跳高功能的猫
<span style="color: #008000;">//<span style="color: #008000;">继承Cat类,又继承跳高接口
<span style="color: #0000ff;">class JumpCat <span style="color: #0000ff;">extends Cat <span style="color: #0000ff;">implements<span style="color: #000000;"> Jumpping {
<span style="color: #0000ff;">public<span style="color: #000000;"> JumpCat() {}
</span><span style="color: #0000ff;">public</span> JumpCat(String name,age);
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> jump() {
System.out.println(</span>"跳高猫"<span style="color: #000000;">);
}
}
<span style="color: #008000;">//<span style="color: #008000;">有跳高功能的狗
<span style="color: #008000;">//<span style="color: #008000;">继承Dog类,又继承跳高接口
<span style="color: #0000ff;">class JumpDog <span style="color: #0000ff;">extends Dog <span style="color: #0000ff;">implements<span style="color: #000000;"> Jumpping {
<span style="color: #0000ff;">public<span style="color: #000000;"> JumpDog() {}
</span><span style="color: #0000ff;">public</span> JumpDog(String name,age);
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> jump() {
System.out.println(</span>"跳高狗"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">定义跳高猫并测试
JumpCat jc = <span style="color: #0000ff;">new<span style="color: #000000;"> JumpCat();
jc.setName("哆啦A梦"<span style="color: #000000;">);
jc.setAge(3<span style="color: #000000;">);
System.out.println(jc.getName()+"---"+<span style="color: #000000;">jc.getAge());
jc.eat();
jc.sleep();
jc.jump();
System.out.println("-----------------"<span style="color: #000000;">);
JumpCat jc2 </span>= <span style="color: #0000ff;">new</span> JumpCat("加菲猫",2<span style="color: #000000;">);
System.out.println(jc2.getName()</span>+"---"+<span style="color: #000000;">jc2.getAge());
jc2.eat();
jc2.sleep();
jc2.jump();
</span><span style="color: #008000;">//</span><span style="color: #008000;">定义跳高狗并进行测试的事情自己完成。</span>
<span style="color: #000000;"> }
}