/** * 父类Animals,子类为Dog,在主函数中调用子类Dog的构造方法 */public class Animals { public int age; private String name; Animals(){ age = 1 ; name = "动物" ; System.out.println("Animals_age:"+age) ; System.out.println("Animals_name:"+name) ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static void main(String[] args) { Dog dog1 = new Dog(); }}class Dog extends Animals{ Dog() { age = 2 ; setName("狗"); System.out.println("Dog_age:"+age); System.out.println("Dog_name:"+getName()); }}结果为:
Animals_age:1
Animals_name:动物
Dog_age:2
Dog_name:狗
基本数据类型
引用数据类型转型:(类 接口)
/** * 父类Animals,子类Dog,子类重写父类show方法 */public class Animals { public void show() { System.out.println(50); } public static void main(String[] args) { Animals dog = new Dog(); //子类对象名向上转型,但是在内存中仍然是Dog对象 dog.show(); //输出100 dog.show2(); //Error,编译错误,在Animals类中无法找到show2方法 }}class Dog extends Animals { @Override public void show() { System.out.println(100); } public void show2() { System.out.println(20); }}子类对象自动转型之后不能调用子类独有的属性和方法
public class Animals { public static void main(String[] args) { Dog dog = new Dog(); Animals a = dog; //dog自动转型为Animals Bird bird = (Bird) a; //a强制转型为Bird,但是转型后的bird存放的仍然是Dog对象 bird.fly(); //此时bird里没有fly方法,运行时出现ClassCastException(转型异常) }}class Dog extends Animals { public void run(){ System.out.println("狗会奔跑"); }}class Bird extends Animals{ public void fly(){ System.out.println("鸟会飞"); }} Dog dog = new Dog(); Animals a1 = dog; if(a1 instanceof Dog){ // 判断a1是否为Dog的实例对象 Dog dog2 = (Dog)a1; //是的话,就可以进行强制转换了 System.out.println("ok"); }public class Animals { int age; String name = "动物"; public static void main(String[] args) { Dog dog1 = new Dog(); //dog1.name = "狗"; ① System.out.println(dog1.name); }}class Dog extends Animals{ //String name; ②}