上转型对象就一句话
你爹都没有的,你也不能有
你爹有的,你要么直接用,要么改改再用
创建对象可以Fruit fruit = new GoldenDelicious();
这样只能自父类向子类创建
如果Macintosh p = new Apple()
,这是不合法的
只能由父类指向子类
其次A a = new C()
,创建的是C的对象
例子
A ------> B --------> C
class A
{
}
class B extends A
{
public void show(){
System.out.println("sb");
}
}
class C extends B
{
}
public class test
{
public static void main(String args[])
{
A a = new C();
a.show(); // 错误
System.out.println(a instanceof B); // true
}
}
这里我们用父类a指向子类c
这个对象a是B的子类,但是不能调用B的函数
这个对象不能调用子类新增的成员变量,不能调用新增的方法
class A
{
public void show()
{
System.out.println("A");
}
}
class B extends A
{
int x = 5;
public void show()
{
System.out.println("B被继承的方法");
}
public void express()
{
System.out.println("another B");
}
}
class C extends B
{
int x = 3;
public void express()
{
System.out.println("C的重写方法");
}
}
public class test
{
public static void main(String args[])
{
B b = new C();
System.out.println(b.x); // B的5 而非C的3
b.show(); // B被继承的方法
b.express(); // C的重写方法
}
}
class A
{
public void show(){
System.out.println("A");
}
}
class B extends A
{
public void show(){
System.out.println("B");
}
}
class C extends B
{
}
public class test
{
public static void main(String args[])
{
A a = new C();
a.show(); // B
}
}
这个例子中
A创建了C,show()方法被继承
对于C来说B才是父类,所以继承方法输出B
如果删掉A中的方法,a.show();
会报错
如果在c中改写这个方法
class C extends B
{
public void show(){
System.out.println("C");
}
}
最后输出C
如果只在A中写这个方法,最后输出A