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);
}
}