黑马程序员技术交流社区

标题: 有个小问题 [打印本页]

作者: 肖勇    时间: 2013-9-25 00:28
标题: 有个小问题
本帖最后由 黄兴旺 于 2013-9-25 22:15 编辑

子类覆盖父类可以使用父类的属性吗?如果能,该怎么使用呢?最好是有源代码!

作者: 陈洋    时间: 2013-9-25 00:48

可以访问的,子类访问父类属性
  1. class A
  2. {
  3.                  String name = "父类中的属性";
  4. }

  5. class B extends A
  6. {
  7.                
  8. }

  9. public class Demo
  10. {
  11.         public static void main(String[] args) throws Exception
  12.         {
  13.                 B b = new B();
  14.                 System.out.println(b.name);
  15.         }
  16. }
复制代码

作者: 梁贺    时间: 2013-9-25 01:12
可以访问。
如果父类的属性是静态的,如下:

class Fu{
        static int num =5;
        void method1(){}
}
class Zi extends Fu{
        void method2(){}
}

class Test2{
        public static void main(String [] args){
                Fu f = new Zi();
                System.out.println(f.num);
        }
}
输出结果为5;

如果子类与父类有同名的属性,那么要访问父类的属性,则需要是父类引用指向子类对象,用多态的方式实现。

class Fu{
         int num =5;
        void method1(){}
}
class Zi extends Fu{
        int num =4;
        void method2(){}
}

class Test2{
        public static void main(String [] args){
                Fu f = new Zi();
                System.out.println(f.num);
        }
}

如果就是正常的继承,那么在子类加载的时候,会把父类的属性加载,并初始化。所以照样可以访问到
class Fu{
         int num =5;
        void method1(){}
}
class Zi extends Fu{
       
        void method2(){}
}

class Test2{
        public static void main(String [] args){
                Zi z = new Zi();
                System.out.println(z.num);
        }
}
如果子类有与父类同名的属性,要访问父类的属性,必须要用多态。
希望能帮助你~
作者: code_geass    时间: 2013-9-25 01:40
子类可以直接调用父类非私有的成员。 如果重名的话会运行子类的
作者: 雪人    时间: 2013-9-25 07:03
本帖最后由 雪人 于 2013-9-25 07:31 编辑

看父类的属性是不是私有的,如果是私有的,就不能使用.

这个很好理解,  给你举个例子:  爸爸的老婆是爸爸私有的,  爸爸可以使用,  但是儿子不能使用...

如图, 类A继承了类B, 在new A后,可以直接调用new A().b1~b3这三个属性,这三个属性分别是public,protected,default三种权限.

但是调用new A().b4的时候,编译器报出了The field B.b4 is not visible这个一个错误, 这个错误大概意思就是在B这个类里面, b4是不可见的. 因为b4是B类里面私有的属性,只有B类自己可以访问得到.


PS: 图片点开看不清的话,下载下来看...我也不知道为什么会看不清....

t9.jpg (71.44 KB, 下载次数: 3)

t9.jpg

作者: 杨增坤    时间: 2013-9-25 07:32
楼主你好!

如果问题解决了,请把问题的未解决更改为已解决

谢谢合作!


作者: doevents    时间: 2013-9-25 08:22
如果是私有的,虽然继承了父类,还是不能用的,
class FatherClass{
        private String name;
        public int age=24;
        public String show(){
                return "臭美灯";
        }
       
        public String toString(){
                return "[name="+name+",age="+age+"]";
        }
}

class ChildClass extends FatherClass{
       
}

public class Demo{
        public static void main(String[] args){
                ChildClass c=new ChildClass();
                System.out.println(c.name);//出错,无法访问
                System.out.println(c.age);
               
        }
}
class ChildClass extends FatherClass{
        public int age=25;
       
}

public class Demo{
        public static void main(String[] args){
                FatherClass fc=new FatherClass ();
                ChildClass c=new ChildClass();
                System.out.println(fc.show());
                System.out.println(c.age);
               
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2