不用写作文,不用考虑虎头蛇尾,不废话直接正题。
今天看了多态,对其中几个名词和多态用法进行了自我总结。
百度知道是这样说的,多态性是指允许不同类的对象对同一消息做出响应,很好的解决了函数重名问题。
A 多态有两种表现形式:覆盖(override)和重载(overload)
1.重载
它发生在同一类中,类中的方法同名不同参数。如下,enjoy方法这种就是重载。且对方法前面的修饰符没有限制。
<pre name="code" class="java">
2.覆盖
覆盖发生在子类中,必须有继承才会有覆盖,又叫重写。
当子类继承了父类之后,对父类的某个方法感觉不舒服,就可以重写(覆盖)那个方法。但是方法名参数列表必须一样,而且访问权限不能比父类的大,父类用了protected,你就不能用public。
class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void enjoy() {
System.out.println("叫声");
}
}
class Dog extends Animal {
private String furColor;
public Dog(String name, String c) {
super(name);
this.furColor = c;
}
public void enjoy() {
System.out.println("狗叫声");
}
}
还是enjoy方法,很容易理解。
B 多态的使用条件
1.要有继承
2.要有重写
3.父类引用指向子类对象
以下也是多态的一种体现,pet是animal,将不同的pet类型传进去就出现不同结果。
class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void enjoy() {
System.out.println("叫声");
}
}
class Dog extends Animal {
private String furColor;
public Dog(String name, String c) {
super(name);
this.furColor = c;
}
public void enjoy() {
System.out.println("狗叫声");
}
}
class Cat extends Animal {
private String eyeColor;
public Cat(String name, String eyeColor) {
super(name);
this.eyeColor = eyeColor;
}
public void enjoy() {
System.out.println("cat叫声");
}
}
class Lady {
Animal pet;
String name;
public Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}
public void myPetEnjoy() {
pet.enjoy();
}
}
public class test{
public static void main(String[] args) {
Cat c = new Cat("cat", "blue");
Dog d = new Dog("dog", "yellow");
Lady l = new Lady("Mom", c);
Lady la = new Lady("Aunt", d);
l.myPetEnjoy();
la.myPetEnjoy();
}
}
打印输出:
写的有些草