黑马程序员技术交流社区
标题:
成员变量的继承问题
[打印本页]
作者:
郭阳
时间:
2012-9-8 22:24
标题:
成员变量的继承问题
本帖最后由 郭阳 于 2012-9-8 23:47 编辑
继承的时候成员变量是可以继承的
如果父类定义一个 private int x=1;
在子类中覆写 int x =2;
那么x在子类中就不是私有的了对吗
——————————————————————————————
class A
{
int x=0;
void get(int x){this.x =x;}
}
class B extends A
{
int x=1;
}
class Demo
{
public static void main (String[] args)
{
B b=new B();
b.get(2);
System.out.println(b.x);
}
}
复制代码
再有就是以上代码为什么运行结果是1,求解
作者:
黄基焜
时间:
2012-9-8 22:43
本帖最后由 黄基焜 于 2012-9-8 22:53 编辑
子类和父类拥有同名成员变量的时候,优先子类的,就这样而已。
还有变量是没有覆写的,只有函数才有。
而且你的get函数操作的是父类的成员变量,并不是子类的成员变量。
class A
{
int x=0;
void set(int x)
{
this.x =x;
}
void get()
{
System.out.println(x);
}
}
class B extends A
{
int x=1;
}
class Demo1
{
public static void main (String[] args)
{
B b=new B();
b.set(2);
b.get();
System.out.println(b.x);
}
}
作者:
杨习平
时间:
2012-9-8 22:54
继承(重点)
(1)把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
(2)继承的概述
A:被继承的类称为超类,父类,基类。
B:继承父类的类被称为子类,派生类。
C:格式
class Demo extends FuDemo
{
}
(3)继承的体系结构
A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
B:继承体系的学习和使用原则
**学习顶层的内容。因为他是整个体系的共性内容。
**创建子类使用。也就是使用底层的具体对象。
(4)继承的特点:
A:java中只能单继承,没有多继承。
B:java可以有多重(层)继承。 爷爷--父亲--儿子--孙子
(5)继承的代码体现。
class Fu
{
}
class Zi extends Fu
{
}
Zi z = new Zi();
用z对象操作。
(6)子父类中的成员关系
A:成员变量
在子类方法中使用一个变量时:
首先,在方法的局部变量中找这个变量,有则使用。
否则,在本类中找成员变量,有则使用。
否则,在父类中找成员变量,有则使用。
否则,报错。
B:成员方法
用子类对象使用一个方法时。
首先,在子类中找这个方法,有则使用。
否则,在父类中找这个方法,有则使用。
否则,报错。
当子父类中的方法名相同时的现象被称为重写。
重写和重载的区别?
重载:在同一类中。方法名相同,参数列表不同。
重写:在不同类中(子父类中)。
方法声明相同(返回类型,方法名,参数列表)。
重载可以改变返回类型。
重写需要注意:
**子类方法的访问权限要大于等于父类方法的访问权限。
**静态只能重写静态。一般不会出现。
C:构造方法
**子类的实例化过程
***子类创建对象时,会先去创建父类的对象。
默认是去调用父类的无参构造方法。
***子类构造方法中,第一行默认是super()
***为什么子类中第一行会默认有super()
因为他继承父类的成员使用,使用前这些成员必须初始化,
而他们是父类的成员,所以,必须通过父类进行初始化。
所以,会先创建一个父类的对象。
**当父类没有无参构造方法时
必须使用this或者super调用其他的构造方法。
作者:
杨新文
时间:
2012-9-8 22:54
1、子类中的int x = 2;并没有覆写父类中的x,因为子类只能继承到父类的
非私有成员
2、b.get(2);实际上调用的是父类的get方法,而方法体中的this.x就是本类中的x,即是父类中的x,它的值的改变跟子类没有关系,所以最后打印子类x时其值还是1。
作者:
蓝迪
时间:
2012-9-8 23:15
第一个问题
当你在父类定义一个 private int x=1; 之后,你的子类继承父类的时候,就继承不了x的值
因为x是父类私有的,他不允许子类使用
而在子类中再写 int x =2; 这已经是一个新的子类中的变量x了,与父类的x没有任何关系,所以x不是私有的
第二个问题
b.get(2) 这个方法调用的是父类的方法
void get(int x){this.x =x;}
在父类中,this.x代表的是父类的x,所以b.get(2) 的作用是把父类的x的值改变成2
而子类中的x没变
当System.out.println(b.x);语句执行时,输出的是b中的x,所以输出为1
作者:
郭阳
时间:
2012-9-8 23:45
已解决谢谢
作者:
王德升
时间:
2012-9-8 23:51
杨习平 发表于 2012-9-8 22:54
继承(重点)
(1)把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
...
哥们 我看你的帖子感觉你基础还是不错的,但是请你不要每次就复制这些文字,谢谢合作!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2