属性隐藏java_java解惑之属性隐藏

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");

}

}

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值