一个Java程序关于继承抽象类和实现接口的问题

有代码Demo7.java如下:
/**
接口练习:
笔记本 extends 计算机 implements 数码相机(视频功能),投影仪(投影功能)
*/
class Computer { //定义一个计算机类
public String name;

public Computer() {

}

public Computer(String name) {
this.name = name;
}

public void getWeb() {
System.out.println("电脑功能:上网");
}
}

interface Camera { //定义一个数码相机类
String name = "佳能数码相机";
public abstract void takePhoto();
}

interface Shadow { //定义一个投影仪类
String name = "索尼投影仪";
public abstract void takeShadow();
}

class NoteBookComp extends Computer implements Camera,Shadow { //笔记本电脑继承计算机类,实现数码相机视频功能,实现投影仪投影功能

public NoteBookComp() {
//super("宏基笔记本电脑");
}

public NoteBookComp(String name) {
super.name = name;
}

public void takePhoto() {
System.out.println("视频");
}

public void takeShadow() {
System.out.println("投影");
}
}

class Demo7 {
public static void main(String[] args) {
NoteBookComp nbc = new NoteBookComp("宏基笔记本电脑");
//System.out.println(nbc.name); //问题2,希望输出结果是"宏基笔记本电脑"
nbc.getWeb();
nbc.takePhoto();
nbc.takeShadow();
}
}

问题:我想在main方法中访问到对象nbc所属类的父类Computer中的属性name,提示

Demo7.java:53: 对 name 的引用不明确,Computer 中的 变量 name 和 Camera 中的 变量
name 都匹配
System.out.println(nbc.name); //问题??
^
1 错误

我知道问题所在是:类Computer中的属性name 和 接口Camera中的属性name 和 接口Shadow中的属性name冲突了,
所以就报错,我的提问是:若不修改 接口Camera中的属性name 和 接口Shadow中的属性name 这两个变量名称,使用之不与
类Computer中的属性name冲突,有没有办法获取到对象nbc所属类的父类Computer中的属性name,即希望输出结果是"宏基笔记本电脑"。

第1个回答  2012-04-08
class Computer { //定义一个计算机类
public static String name;//我加的static

public Computer() {

}

public Computer(String name) {
this.name = name;
}

public void getWeb() {
System.out.println("电脑功能:上网");
}
}

interface Camera { //定义一个数码相机类
String name = "佳能数码相机";
public abstract void takePhoto();
}

interface Shadow { //定义一个投影仪类
String name = "索尼投影仪";
public abstract void takeShadow();
}

class NoteBookComp extends Computer implements Camera,Shadow { //笔记本电脑继承计算机类,实现数码相机视频功能,实现投影仪投影功能

String name ;//我加的

public NoteBookComp() {
//super("宏基笔记本电脑");
}

public NoteBookComp(String name) {
super(name);
this.name=name;

}

public void takePhoto() {
System.out.println("视频");
}

public void takeShadow() {
System.out.println("投影");
}
}

class Demo7 {
public static void main(String[] args) {
NoteBookComp nbc = new NoteBookComp("宏基笔记本电脑");
System.out.println(Computer.name);
System.out.println(nbc.name); //问题2,希望输出结果是"宏基笔记本电脑"
nbc.getWeb();
nbc.takePhoto();
nbc.takeShadow();
}
}

我其实也不知道你说啥,这样改了,没啥冲突。
大家多多指教。
第2个回答  2012-04-08
通过方法访问对象的属性:在NoteBookComp类中加入一个方法如下:
public String getName(){
return super.name;
}
main中的System部分用方法获取name:
System.out.println(nbc.getName());
其他部分不用改,使用这种方式就能打到你想要的目的。本回答被网友采纳
第3个回答  2012-04-08
不好意思,看错要求了,再帮你看看

JAVA抽象类、接口继承的疑惑
抽象类b实现接口a,他可能没有完全实现a的方法。b可以有自己的新方法。c类继承接口a,他可以获得a里面所有的抽象方法,常量属性,内部类,枚举等等。d继承b同时实现c,就是吧上面两个情况综合一下,如果b实现a的某方法,那么d中调用的就是b实现的这个,如果b中没实现a的方法,d中也可以访问a的这个...

java继承抽象类和接口问题
1.抽象类,不能实例化,也就是不能new,也就是不能创始对象。你可以这么理解:抽象,就是模糊的概念,相当于人们说的经常说的概念车之类的,为什么叫概念车,是因为只有个大概的模型,很多技术(在java里我们称之为方法)没有实现,所以不能造出车子(java中我们就是不能new啦)。当然只有解决所以技...

java继承和接口的2个问题
第一题 A 错。java中的类没有多继承的概念,不可能有多个直接父类。只有接口才支持多继承。B 对。C 对。D 对。所以答案选A。第二题 A 错。接口中只有抽象方法,不可能有普通方法。B 错。接口中的成员变量默认的都是静态常量(static final)。所以不可以修改。C对。接口可以继承接口,而且一个...

java中一个类不能同时继承一个类和实现一个接口
java中一个类不能同时继承一个类和实现一个接口是错误的。接口和抽象类都能描述一般性的公有特征,一般来说,强是关系清晰地描述了父子关系,应该用类模拟,比如苹果是一种水果。而弱是关系是指对象具有某种属性,适合用接口模拟,比如苹果是可以吃的。由于子类只能扩展一个父类,而能实现多个接口,所...

...一个已经实现好的类,要么继承抽象类,要么实现接口
首先:继承的目的:是把在某个类在设计之初是,某个方法的功能不太清楚,或相同的方法在它的子类中的功能不相同,所以才把这个类设计成抽象类,使得编码,更灵活 注:一个类是可以继承一个实现好的类的 然后:继承\/实现接口的好处 1、可以重用代码,减少相同代码的重复编写 2、多态,使得父类\/继承...

java继承问题; 一个类继承了接口,必须实现接口里的抽象方法,否则报错...
因为子类继承父类是,就自动继承了父类中的所有非私有方法。所以相当于子类已实现了这些方法。就不用必须显式实现接口中定义的方法了(当然子类也可以自行实现这些方法,从而覆盖父类中的相应方法)

java中抽象类和接口的区别?
抽象类是被用来创建继承层级里子类的模板。 接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。 扩展资料: 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,...

java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方 ...
不一定。1. 普通类继承,并非一定要重写父类方法。2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;...

【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖...
初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类、对象、重载、封装、继承、多态、覆盖、抽象类、接口概念。为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定义、设计用意、使用规范和注意事项。长文警告,建议先收藏后阅读!为控制篇幅,本文将分上中下三篇讲解...

java抽象类或接口被继承后方法一定要重写吗
其他必须重写,接口的方法必须重写,接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补java不能多重继承,接口针对的是对象而不是实现。实现的部分可以交由对象去实现。这就是java中的多态啊。好好思考一下上面的几句话就行了。一定要对java的基本理论清楚。

相似回答