多态
- 不同的对象,作用于同一个操作,产生不同的结果
- 需要满足继承、方法重写和子类赋值给父类(或者父类指向子类)三个条件这时多态就出现了
案例:
定义一个动物类为父类,里面有动物的名字,年龄,品种.定义三个子类,狗,猫,老虎,然后打印
出信息,如:2岁的拉布拉多旺财汪汪汪的叫
package heihei;
public class animal {
public static class Animal{//(父类条件1)
String name;
int age;
String speak;
void ab() {//无参函数
System.out.println("动物:");
}
void animal(String name,int age,String speak){//有参函数
System.out.println("Animal"+ name+age+ "岁"
+"Animal"+ speak);
}
}
public static class Dog extends Animal{//继承父类的狗子类(条件1)
void ab() {//方法重写(条件2)
System.out.println("狗子:");
}
void animal(String name,int age,String speak){//方法重写
System.out.println("Dog"+ name+age+ "岁"
+"Dog"+ speak);
}
}
public static class Cat extends Animal{//继承父类的猫子类
void ab() {
System.out.println("猫子:");
}
void animal(String name,int age,String speak){
System.out.println("Cat"+ name+age+ "岁"
+"Cat"+ speak);
}
}
public static class Tiger extends Animal{//继承父类的虎子类
void ab() {
System.out.println("虎子:");
}
void animal(String name,int age,String speak){
System.out.println("Tiger"+ name+age+ "岁"
+"Tiger"+ speak);
}
}
//操作子类对象给父类赋值(条件3)
public static void test(Animal bb) {//Animal bb=d和c和a就把啊a,d,c的值给了父类bb
bb.ab ();
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Dog d=new Dog();
test(d);
//给有参函数赋值
System.out.println("狗肉 "+6+" 汪汪汪");
Cat c=new Cat();
test(c);
System.out.println("毛球 "+2+" 咩咩咩");
Tiger a=new Tiger();
test(a);
System.out.println("大猫 "+5+" 嗷嗷嗷嗷嗷嗷");
}
}
输出:
继承
- 继承的关键字:extends
- 只能单继承
- 自动添加一个父类就是Object
- 子类继承了父类的属性和方法,但是私有成员不能继承(其实是可以继承,只不过是隐藏了)
- 子类继承了父类的属性,是复制一份过来了.
- 继承中的构造函数,子类不能继承父类的构造函数,但可以通过特殊方法调用