子类继承父类方法,覆盖属性。通过子类调用继承的方法如果返回属性,是返回父类属性还是子类属性? 子类继承父类属性,为什么修改不了属性呢?

龙西四弟 2015-07-28 05:37:16
package com.zou;

public class ExtendsTest {
public static void main(String[] args) {
B b = new B();
System.out.println(b.getName());
System.out.println(b.name);
b.test();
}

}

class A {
String name = "A";

// int age = 30;

public String getName() {
System.out.println("父类");
return this.name;
}




}
class B extends A
{
//String name = "B";
public void setName()
{
name = "B"; //修改父类属性
}
public void test()
{
System.out.println("子类");

System.out.println(name);

}
}

运行结果:
父类
A
A
子类
A

...全文
388 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangdekun 2015-07-30
  • 打赏
  • 举报
回复
没修改,setName没调用
xxm712 2015-07-30
  • 打赏
  • 举报
回复
父类赋直方法没有被调用
龙西四弟 2015-07-30
  • 打赏
  • 举报
回复
引用 8 楼 zhangdekun 的回复:
没修改,setName没调用
的确是我疏忽了,没有调用setName()
cricel 2015-07-29
  • 打赏
  • 举报
回复
其实我不是很理解楼主想干嘛,你的父类里面没有设置set的方法,所以你的name值一直为A(你在父类中定义为A)。我用代码注释来解答吧
public class tests1 {
	public static void main(String[] args) {
		B b = new B();
//new一个B 叫b
		System.out.println(b.getName());
//打印 父类(在B类中没有重新getName的方法,所以调用A类中的getName,)
		System.out.println(b.name);
//打印 A (在B类中没有定义name或者给name赋值,所以调用A类中的初始化值name=A;
//你并没有调用setname去改变name的值,)
		b.test();
//打印 子类 A (依旧没有改变name的值。所以还是为A)
	}
}

class A {
	String name = "A";
	// int age = 30;
	public String getName() {
		System.out.println("父类");
		return this.name;
	}
}

class B extends A {
	// String name = "B";
	public void setName() {
		name = "B"; // 修改父类属性
	}
	public void test() {
		System.out.println("子类");
		System.out.println(name);
	}
}
迷林 2015-07-29
  • 打赏
  • 举报
回复
请先为父类赋值 但是我没看见你的SET方法 我不知道你这个出来会不会出错
dlhansy 2015-07-29
  • 打赏
  • 举报
回复
从你的例子来看,B类没有覆盖A类的getName方法,所以b.getName()得到一定是父类的变量。 如果B类增加getName()方法,且B类也定义String name = "B";那得到的就是子类的变量

class ExtendsTest {
	public static void main(String[] args) {
		B b = new B();
		System.out.println(b.getName());
		System.out.println(b.name);
		b.test();
	}
}

class A {
	String name = "A";

	// int age = 30;

	public String getName() {
		System.out.println("父类");
		return this.name;
	}

}

class B extends A {
	 String name = "B";//覆盖父类变量
	public void setName() {
		name = "B"; // 修改父类属性
	}
	//如果不覆盖,返回的父类变量
	@Override
	public String getName() {
		return name;//子类变量
	}

	public void test() {
		System.out.println("子类");

		System.out.println(name);

	}
}
sanfenzhongao 2015-07-29
  • 打赏
  • 举报
回复
子类B想修改父类A的属性,要调用父类A的set方法,但是父类没有set方法,所以没有修改成功,你把B里的set方法,放到A里就能修改了
qq_29448025 2015-07-29
  • 打赏
  • 举报
回复
楼主问题没有描述清楚。
qq_26754943 2015-07-28
  • 打赏
  • 举报
回复
请先调用子类的setName()方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧