多态
同一个方法的调用,不同的对象出现不同的行为。
多态是方法的多态。
多态存在的三个必要条件:继承、重写、父类引用指向子类对象。
用父类引用调用子类重写方法。
public class _2_23Demo {
public static void main(String[] args) {
//1.多态
// ChildClass cc = new ChildClass();
// 类似与静态初始化
// cc.f();
// Animal a = new Animal();
// Cat cat = new Cat();
// Animal a = new Dog();
// a.shout();
// AnimalCry(cat);
//2.访问控制符的使用
// public可以跨包 其余都不可以
//3.强制转型
// Animal a = new Dog(); //编译器认为它是Animal,它本质是Dog
// a.shout(); //运行是汪汪汪 但没有seeDoor方法 编译器认为和本质还是有区别的
//
// Dog a1 =(Dog)a; //强制转型
//
// Animal b =new Cat();
// Dog b1 = (Dog)b; //本质是一只猫 转过来就有问题 classCastException
// b1.seeDoor(); //编译和实际运行还是不一样的
//4.final的使用
// final关键字class不能继承,方法不能重写,变量变成常量只能赋一次值
}
static void AnimalCry(Animal a){
a.shout();
}
}
class FatherClass{
public int value;
public FatherClass(){
System.out.println("调用父类方法");
}
public void f(){
this.value=100;
System.out.println(value);
}
}
class ChildClass extends FatherClass{
public int value;
public ChildClass(){
super(); //有没有这个方法系统都会帮你默认添加
System.out.println("调用子类方法");
}
@Override
public void f() {
super.f(); //super调用父类的引用
this.value=200;
System.out.println(value);
System.out.println(super.value); //调用父类的变量
}
}
class Animal{
public void shout(){
System.out.println("叫了一声");
}
}
class Dog extends Animal{
@Override
public void shout() {
System.out.println("汪汪汪");
}
public void seeDoor(){
System.out.println("看门");
}
}
class Cat extends Animal{
@Override
public void shout() {
System.out.println("喵喵喵");
}
}
class User{
int age;
String name;
public User(int age) {
this.age = age;
}
}