public int i = 20;
}
public class Demo{
public static void main(String[] args){
B b = new B();
A a = b;// 这一步什么意思,a.i结果为什么是10 呢??这句是不是省略了点东西还是?
System.out.println(b.i);
System.out.println(a.i);
作者: 刘胜寒 时间: 2013-4-1 22:03
视频里面有详细的解释的。。。 a.i是A的对象,所以还是类A里面的值。。。
第二个:那句话是错误的。可以覆盖接口的方法,也可以不覆盖....
interface A
{
xxx();
}
class B implements A
{
bbb();
}
这个是可以编译过去的作者: HM何伟 时间: 2013-4-1 22:25
相当于A a=new B();这里是多态的体现.重载与覆盖是两个不同的概念,要分清分.作者: vmvm555 时间: 2013-4-2 12:53 本帖最后由 vmvm555 于 2013-4-2 13:16 编辑
对着代码和你说吧
问题一:关于继承的问题
class A{
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class Demo{
public static void main(String[] args){
B b = new B();
A a = b;// 这一步什么意思,a.i结果为什么是10 呢??这句是不是省略了点东西还是?
你创建了B类的对象,但使用的是他的父类A类的引用,父类引用指向子类对象,java的多态,此时使用a变量只能访问父类中的方法,和字段,打印的当然是10
父类和子类中都有一个字段i 创建对象的时候默认会调用父类的构造方法,父类和子类都有自己的字段i, A a = b相当于把变量向上转型了,先得到子类中的i的话
可以使用强制向下转型(B)a
System.out.println(b.i);
System.out.println(a.i);
public int i = 20;
}
public class Demo{
public static void main(String[] args){
B b = new B();
A a = b;// (A a=b 也就是 A a=new B() 这里是对象的多态特征;) 这一步什么意思,a.i结果为什么是10 呢??这句是不是省略了点东西还是?
System.out.println(b.i); (B b=new B(), b.i调用的是成员变量,编译和运行时都看等号左边,所以,结果是:20)
System.out.println(a.i); ( A a =new B(), a.i调用的也是成员变量,同上。结果是:10)