Java中的多态,抽象类,接口
多态
在运行期间,判断所引用的对象的实际类型,根据实际情况调用特定的方法,即,同一个对象的多种状态的行为。
多态所需要满足的条件
继承
重写
父类引用指向子类的对象(向上转型)
⽰例:喜欢宠物的年轻妇⼥
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void enjoy() {
System.out.println("我是动物的enjoy⽅方法");
}
}
class Dog extends Animal {
public String furColor;
public Dog(String name, String furColor) {
super(name);
this.furColor = furColor;
}
@Override
public void enjoy() {
System.out.println("旺旺...");
}
动态绑定(多态)
动态绑定是指在运⾏期间,判断所引⽤对象的实际类型,根据其实际的类型调⽤相应的⽅法,多态即:⼀个对象的多
种状态的⾏为。
}
@Override
public String toString() {
return "我是⼀一只狗," + this.name +"是我的名字,我的⽑毛⾊色是" +this.furColor;
}
}
class Cat extends Animal {
public String eyeColor;
public Cat(String name, String eyeColor) {
super(name);
this.eyeColor = eyeColor;
}
@Override
public void enjoy() {
System.out.println("喵喵...");
}
@Override
public String toString() {
return "我是⼀一只猫," + this.name +"是我的名字,我眼睛的颜⾊色是" +this.eyeColor;
}
}
class Lady {
private String name;
private Animal pet;
public Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}
public void enjoy() {
pet.enjoy();
}
}
@Test
public void test2(){
Dog d = new Dog("⾦毛", "⻩色");
Cat c = new Cat("咖菲猫", "咖啡⾊");
Lady mary = new Lady("Mary", d);
Lady lucy = new Lady("Lucy", c);
mary.enjoy();
lucy.enjoy();
}
抽象类
用关键字abstract修饰的类,就是抽象类,抽象类中必然有一个或者多个抽象方法,抽象方法不需要写任何东西,即,public abstractvoid eat();
抽象类需要注意
子类继承父类必然要重写父类的抽象方法,
抽象类不能实例化
接口
接口是一种标准,用interface关键字定义的。接口是抽象类的特殊化。其实是抽象方法和静态常量值的定义的集合。
示例:
packagetest11;
public interfaceVehicle {
voidstart(int speed);
voidstop(int speed);
}
抽象类与接口的区别
接口是抽象类的特殊版本,接口的方法必须都为抽象,抽象类中有的方法可以不为抽象方法。
实现抽象类里的方法时,可以实现部分的方法,但是接口里的方法必须都要实现
抽象类中可以有私有的成员变量和私有的方法
一个类只能继承一个抽象类,Java只支持单继承,但是一个类可以实现多接口
接口中的方法全部被修饰为公共的抽象方法即,public abstract类型的