【Java】多态和抽象
来源:互联网 发布:淘宝下架时间显示插件 编辑:程序博客网 时间:2024/06/08 13:51
多态
class Animal{ private String name; Animal(String name){ this.name=name; } public void enjoy(){ System.out.println("叫声......"); }}class Cat extends Animal{ private String eyesColor; Cat(String n,String c){ super(n); eyesColor=c; } public void enjoy(){ System.out.println("猫叫声......"); }}class Dog extends Animal{ private String furColor; Dog(String n,String c){ super(n); furColor=c; } public void enjoy(){ System.out.println("狗叫声......"); }}class Lady{ private String name; private Animal pet; Lady(String name,Animal pet){ this.name = name; this.pet = pet; } public void myPetEnjoy(){ pet.enjoy(); }}public class TestPolymoph{ public static void main(String args[]){ Cat c = new Cat("catname","blue"); Dog d = new Dog("dogname","black"); Lady L1 = new Lady("L1",c); Lady L2 = new Lady ("L2",d); L1.myPetEnjoy(); L2.myPetEnjoy(); }}
多态表示不同的对象执行相同的动作,但要通过它们自己的实现代码来执行。上面的例子中,猫类和狗类执行相同的动作–叫声,但通过自己的实现代码来执行–猫叫声和狗叫声。根据Lady对象的成员变量pet所引用的不同的实际类型而调用响应的enjoy方法。多态的三个必要条件:要有继承;要有重写;父类引用指向子类对象。
抽象
就像“动物”是一个抽象的名词,根本没有具体的对象与之对应,实例化没有任何意义,像这样的情况,我们可以把它改为抽象类,即在class之前加abstract关键字。用abstract来修饰方法时,它就是抽象方法。使用的时候,我们可以考虑让抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。
注意:1、抽象方法一定是用来被实现的。2、抽象类必须被继承。3、抽象方法必须被重写。4、抽象类不能被实例化。5、抽象方法只声明不实现。
abstract class Animal { //抽象类 private String name; Animal(String name) {this.name = name;} public abstract void enjoy(); //抽象方法,只需声明不需实现}class Dog extends Animal { private String furColor; Dog(String n,String c) {super(n); furColor = c;} public void enjoy() { //抽象方法的实现 System.out.println("狗叫声......"); }}class Bird extends Animal { //抽象类的继承 Bird() { super("bird"); //调用基类的构造方法 } public void enjoy() { System.out.println("鸟叫声......"); }}class Lady { private String name; private Animal pet; Lady(String name,Animal pet) { this.name = name; this.pet = pet; } public void myPetEnjoy(){pet.enjoy();}}public class TestPolymoph { public static void main(String args[]){ Dog d = new Dog("dogname","black"); Bird b = new Bird(); Lady L1 = new Lady("L1",d); Lady L2 = new Lady("L2",b); L1.myPetEnjoy(); L2.myPetEnjoy(); }}
1 0
- 【Java】多态和抽象
- Java抽象类和多态
- java 继承和多态 抽象类和接口
- java 抽象类和接口和多态的使用
- 多态和抽象
- 多态和抽象
- 多态和抽象
- 多态和抽象
- 多态和抽象
- 抽象和多态
- 抽象和多态
- java抽象和抽象类
- java面向对象上:多态和抽象
- Java中的多态,抽象类和接口
- Java学习-多态学习续 抽象类和接口
- java中抽象类和接口的多态
- 七:Java之封装、抽象、多态和继承
- java抽象类和接口的多态
- Socket .i0 介绍
- Search for a Range
- 省市区三级联动
- java abstract抽象类
- Codeforces86D【莫队算法】
- 【Java】多态和抽象
- Linux平台下线程池的原理及实现
- 【Dongle】【EF】EF框架学习
- centos下完全卸载mysql
- 域对象
- Java输入输出流详解
- i++ 与 ++i 的区别
- log4j maven 打印日志
- 网站设计时浏览器不兼容解决方式