java解惑之属性隐藏

时间:2015-04-17 11:32:12   收藏:0   阅读:147
<span style="font-size:18px;">import java.util.*;
public class SixtySixth {
        public static void main(String[] args){
                System.out.println(new Child().name);
                System.out.println(new Child().count);
                System.out.println(new Child().parent);
                System.out.println(((Base)new Child()).count);
                System.out.println(((Base)new Child()).name);
                //System.out.println(((Base)new Child()).uniq);
                Child.fun();//调用子类隐藏的方法
                new Child().f1();//调用子类继承的方法,在f1()中调用重写的f()
        }
}
class Child extends Base{
        public String name =  "child";//掩盖父类的非静态name
        public static int count=100;//掩盖了父类的静态count
        public static int uniq = 200;//子类独有的静态
        public static void fun(){
                System.out.println("fun:child");
        }
        public void f(){
                System.out.println("override");
        }
}
class Base{
        public String name =  "base";
        public static int count = 0;
        public static int parent=5;//父类独有静态
        public int bc = 6;//父类独有的非静态bc,可被子类继承
        public Base(){
                count++;
        }
        public void f1(){
                f();
        }
        public static void fun(){
                System.out.println("fun:base");
                //f();
        }
        public void f(){
                System.out.println("original");
        }
}
</span>

child
100
5
4
base
fun:child
override

关于继承

静态方法,一般方法和静态属性,一般属性都会被子类继承到,但是只有一般方法可以被重写,有多态性,其他三个都是被继承或被隐藏。

如果被隐藏了,那么访问的就是子类中的属性,而不管是不是合理。

如:

import java.util.*;
public class SixtySixth {
        public static void main(String[] args){
                System.out.println(new c().a);
        }
}
class c extends b{
        private int a = 0;
}
class b{
        public int a = 1;
}

访问到的a是谁呢?是输出0还是1呢?

SixtySixth.java:12: 错误: a可以在c中访问private
		System.out.println(new c().a);
		                          ^
1 个错误
既没有输出0也没有输出1,而是报错了。也就是说被隐藏之后的属性,只能在类里面用super访问隐藏的属性或方法。

import java.util.*;
public class SixtySixth {
        public static void main(String[] args){
                new c().f();
        }
}
class c extends b{
        private int a = 0;
        public void f(){
                System.out.println("我的a="+a);
                System.out.println("我父类的a="+super.a);
        }
}
class b{
        public int a = 1;
}

我的a=0
我父类的a=1


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!