java中字段继承问题--子类不能继承父类的私有成员

public class Test1 {
    private int t1 = 1;

    public int getT1() {
        return t1;
    }

    public void setT1(int t1) {
        this.t1 = t1;
    }

}

以上是Test1类,有个private的t1,值为1,给了get/set方法。

public class Test2 extends Test1 {
    private int t1 = 2;

    public static void main(String[] args) {
        Test1 test1 = new Test1();
        Test2 test2 = new Test2();
        System.out.println(test1.getT1());
        System.out.println(test2.getT1());
    }

}

以上,Test2继承了Test1,也给了一个t1属性,但值为2。

输出结果为:

1
1

public class Test2 extends Test1 {
    private int t1 = 2;

    public int getT1() {
        return t1;
    }

    public void setT1(int t1) {
        this.t1 = t1;
    }

    public static void main(String[] args) {
        Test1 test1 = new Test1();
        Test2 test2 = new Test2();
        System.out.println(test1.getT1());
        System.out.println(test2.getT1());
    }

}

Test2继承了Test1,也给了一个t1属性,但值为2,提供了get/set方法。

输出结果:

1
2

结论:子类没有继承父类的private字段,只是通过父类暴露的public的getT1()方法来访问到的父类的private字段,值为1,一旦子类重写了getT1()方法,则得到的值就改变了,值为2。

http://jingyan.baidu.com/article/14bd256e45cc69bb6c261273.html?st=2&net_type=&bd_page_type=1&os=0&rst=&word=%E6%88%BF%E4%BA%A7%E7%BB%A7%E6%89%BF

时间: 2024-10-06 00:18:55

java中字段继承问题--子类不能继承父类的私有成员的相关文章

java中的3大特性之继承

继承的特点:继承父类的属性和方法.单继承(多层继承)c++里的继承是多继承 特性 :方法的复写(重写) java中的继承和OC中一样. 比如:人可以养狗; 人---->狗 :整体和部分(拥有)关系. 球队---->球员 :整体和部分的关系. 代码中是最常见 has a 的关系 人 ---->学生 :学生是人  : 说明有一个继承关系存在 , 关系到底是否表现出来,有具体的情况来决定. 如何判断两个事物之间是否存在一个继承关系: is a  谁是谁是否成立.成立就有继承关系. A:B :

Java子类访问父类的私有成员变量

/**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中重名的方法,则为重写.即子类重写了父类的方法,用于多态. * 同一个类中函数的签名不同,则为方法的重载.函数的签名为函数名+参数列表,与返回值无关. */

何为java中常说的封装、继承、多态

1.封装 将对象的状态信息隐藏在对象内部不允许外部程序访问直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问,也就是set和get方法. 主要就是两个含义: (1)把该隐藏的隐藏起来. (2)把该暴露的暴露出来. 2.继承 子类继承父类的行为. 3.多态 java 中的多态分为两种:编辑时多态和运行时多态. 编辑时的多态可以体现在方法的重载.一个方法名可以拥有不同的入参方式,方法体也不一样,根据情况的不一样去实现. 运行时多态是指让程序可以选择多个运行状态.指向子类的父类

Java中静态变量与静态方法的继承

class A { static int a = 1; static int b = 2; public static void printA() { System.out.println(a); } public static void printB() { System.out.println(b); } } class B extends A { static int a = 3; static int b = 4; public static void printB() { // 如果B

java中为什么不能通过getClass().getName()获取父类的类名

例如: class A{} public class B extends A{ public void test(){ System.out.println(super.getClass().getName()); } publis static void main(String[] args){ new B().test(); //得到的输出结果为B,而不是A //可以通过this.getClass.getSuperclass().getName()获取父类类名(java的反射机制) } }

Java中Class和单例类的作用与类成员的理解

Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存这些信息的类称为Class.可能容易产生混淆,容易想到class.不过二者没什么关系,class不过是描述类的一个关键字.而Class却是保存着运行时信息的类. 它能做什么?Class类可以帮助我们在程序运行时分析类,说白了就是获取类中的值.可能瞬间就想到了反射,没错!Class一般就是和反射配套使

java中静态变量与静态方法的继承(转)

总结: 1.静态变量与静态方法说继承并不确切,静态方法与变量是属于类的方法与变量.而子类也属于超类,比如说Manage extends Employee,则Manage也是一个Employee,所以子类能够调用属于超类的静态变量和方法.注意,子类调用的其实就是超类的静态方法和变量,而不是继承自超类的静态方法与变量.但是如果子类中有同名的静态方法与变量,这时候调用的就是子类本身的,因为子类的静态变量与静态方法会隐藏父类的静态方法和变量. 2.如果子类中没有定义同名的变量和方法,那么调用 "子类名.

JAVA中为什么要使用接口,继承接口不是还要重写方法吗?为什么不直接写那些方法呢?:::接口的最主要的作用是达到统一访问

接口的最主要的作用是达到统一访问 那么什么叫统一访问呢 举个例子 你这样想,我做一个USB接口,有个读的抽象方法 那叫read()吧,然后mp3类实现,U盘类实现,移动硬盘类实现,这样我用的时候用USB a=new [类名]:这样a.read();要是我类名里写U盘,就读U盘,写mp3就读mp3,而这个名字可以从属性文件里读,你写哪个就用哪个了 这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同 我用接口来定义对象不就可以做到统一访问了吗?接口主要针对多个类实现它来说的,要是

java中Collection类及其子类

1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组 而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用. (2)集合和数组的区别? A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合