A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 肖勇 中级黑马   /  2013-9-25 00:28  /  1245 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄兴旺 于 2013-9-25 22:15 编辑

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

评分

参与人数 2技术分 +2 收起 理由
杨增坤 + 1
黄兴旺 + 1

查看全部评分

6 个回复

正序浏览
如果是私有的,虽然继承了父类,还是不能用的,
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);
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
楼主你好!

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

谢谢合作!

回复 使用道具 举报
本帖最后由 雪人 于 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

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
子类可以直接调用父类非私有的成员。 如果重名的话会运行子类的
回复 使用道具 举报
可以访问。
如果父类的属性是静态的,如下:

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);
        }
}
如果子类有与父类同名的属性,要访问父类的属性,必须要用多态。
希望能帮助你~

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报

可以访问的,子类访问父类属性
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报 0 1
您需要登录后才可以回帖 登录 | 加入黑马