Yunyuzuiluo

10.21继承的学习

class Grandparent
{
public Grandparent()
{
System.out.println("GrandParent Created.");
}
public Grandparent(String string)
{
System.out.println("GrandParent Created.String:" + string);
}
}
class Parent extends Grandparent
{
public Parent()
{
//super("Hello.Grandparent.");//super必须放第一句,没有就自动调用无参调用方法。super指的是父类的调用
System.out.println("Parent Created");
//super("Hello.Grandparent.");

}

}
class Child extends Parent
{
public Child()
{
System.out.println("Child Created");
}
}

public class justsoso
{
public static void main(String args[])
{
Child c = new Child();
}
}

class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}

public class justsoso
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
//d=m;不兼容
d=(Dog)m;
//d=c;转换失败
c=(Cat)m;

}

}子类可以赋值给父类,反过来不行

public class justsoso {
public static void main(String[] args) {
Parent parent=new Parent();//父100
parent.printValue();//子200
Child child=new Child();//200
child.printValue();//200

    parent=child;//应该是覆盖了,此时parent实际上指向了子类对象。这里并不是覆盖,而是多态的一种表现形式,即父类引用指向子类对象。此时想改变输出,得用下面强转的方法
    parent.printValue();//100变200

    parent.myValue++;
    parent.myValue++;//毫无意义,不是毫无意义,而是将父类的myValue从 100 变为 102。
    parent.printValue();//依旧是200

    ((Child)parent).myValue++;//变成201了
    parent.printValue();

}

}

class Parent{
public int myValue=100;
public void printValue() {
System.out.println("Parent.printValue(),myValue="+myValue);
}
}
class Child extends Parent{
public int myValue=200;
public void printValue() {
System.out.println("Child.printValue(),myValue="+myValue);
}
}

posted on 2024-10-21 15:34  刘晋宇  阅读(4)  评论(0编辑  收藏  举报

导航