子类继承父类的同时又去实现一个成员变量、方法与父类相同的接口,最后调的是谁的成员变量和方法?
2015-04-25 14:52
1076 查看
此文只讨论如题的这种情况,不要问我为什么这么逗逼,面试题就是这么逗逼!!
接口代码如下:
父类代码如下:
子类代码如下:
Main函数如下:
执行结果:在子类重写方法里打印,结果:n = 30,调用的是:抽象类的成员变量
总结:当出现子类继承父类的同时又去实现一个成员变量、方法与父类相同的接口时,重写的是父类的方法,接口的方法被隐藏。
如果子类没有定义跟父类、接口一样的成员变量,则需要通过super关键字调用父类的成员变量,接口的成员则无法调用,而且这个时候不用super关键的话,IDE会提示使用的成员变量是ambiguous(暧昧的、混淆的),无法通过编译;
如果子类同时还定义了跟父类、接口一样的成员变量,可以直接调它本身的成员变量,能过super关键字可以调父类的成员变量,而接口的成员变量则无法调用。
以上测试,关于怎么在子类中显式地调接口的成员变量和方法,如有童鞋知道的话,请告知哦。多谢了~
从别地方拷来的补充知识点:
子类在隐藏了父类的成员变量或重载了父类的方法后,常常还要用到父类的成员变量,或在重载的方法中使用父类中被重载的方法以简化代码的编写,这时就要访问父类的成员变量或调用父类的方法,Java中通过super来实现对父类成员的访问。
Java中,this用来引用当前对象,与this 类似,super用来引用当前对象的父类。
super的使用有三种情况:
1. 用来访问父类被隐藏的成员变量,如:super.variable
2. 用来调用父类中被重载的方法,如:super.Method ( [paramlist] );
3. 用来调用父类的构造函数,如: super( [paramlist] );
更多关于Java对象继承和接口实现的基础知识,可以参见以下地址:
http://61.187.10.76/java/htm/ch7/7-1.htm http://my.oschina.net/u/617660/blog/83427
接口代码如下:
public interface MyInterface { int n = 10; String str = "接口成员变量"; //接口方法不能实现,所以是不能出现{} public void doSomething() ; }
父类代码如下:
public abstract class ParentClass { int n = 30; String str = "抽象类的成员变量"; //顺便提一下,抽象方法是不能有{}的 // public abstract void doSomething() {}; public abstract void doSomething() ; //非抽象方法才可以有{} public void doSomething2() {}; }
子类代码如下:
public class SubClass extends ParentClass implements MyInterface { @Override public void doSomething() { //如果打开下面这话代码的注释,IDE会提示n和str是ambiguous(暧昧的、混淆的),无法通过编译 //System.out.println("在子类重写方法里打印,结果:n = " + n + ",调用的是:" + str); System.out.println("在子类重写方法里打印,结果:n = " + super.n + ",调用的是:" + super.str); } }
Main函数如下:
public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.doSomething(); }
执行结果:在子类重写方法里打印,结果:n = 30,调用的是:抽象类的成员变量
总结:当出现子类继承父类的同时又去实现一个成员变量、方法与父类相同的接口时,重写的是父类的方法,接口的方法被隐藏。
如果子类没有定义跟父类、接口一样的成员变量,则需要通过super关键字调用父类的成员变量,接口的成员则无法调用,而且这个时候不用super关键的话,IDE会提示使用的成员变量是ambiguous(暧昧的、混淆的),无法通过编译;
如果子类同时还定义了跟父类、接口一样的成员变量,可以直接调它本身的成员变量,能过super关键字可以调父类的成员变量,而接口的成员变量则无法调用。
以上测试,关于怎么在子类中显式地调接口的成员变量和方法,如有童鞋知道的话,请告知哦。多谢了~
从别地方拷来的补充知识点:
子类在隐藏了父类的成员变量或重载了父类的方法后,常常还要用到父类的成员变量,或在重载的方法中使用父类中被重载的方法以简化代码的编写,这时就要访问父类的成员变量或调用父类的方法,Java中通过super来实现对父类成员的访问。
Java中,this用来引用当前对象,与this 类似,super用来引用当前对象的父类。
super的使用有三种情况:
1. 用来访问父类被隐藏的成员变量,如:super.variable
2. 用来调用父类中被重载的方法,如:super.Method ( [paramlist] );
3. 用来调用父类的构造函数,如: super( [paramlist] );
更多关于Java对象继承和接口实现的基础知识,可以参见以下地址:
http://61.187.10.76/java/htm/ch7/7-1.htm http://my.oschina.net/u/617660/blog/83427
相关文章推荐
- java 子类继承父类成员变量的隐藏、实现方法的重写
- java中子类继承父类和实现接口有同名方法怎么处理
- 2018/01/07JAVA 基础 / 接口与继承:重写【子类继承并覆盖父类的对象方法】、隐藏【子类继承并覆盖父类的类方法】与实现类实现接口方法の区别
- 2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?
- (一)获取类的三种方式,根据类获取成员变量,成员方法,直接实现的接口,自己的构造方法,直接的父类
- Java编程中,子类可以用用这种方法给继承父类的成员变量赋值么?
- 继承中父类子类有相同的变量与方法情况
- Java子类的父类和要实现的接口有相同的方法/函数会冲突吗
- 策略设计模式:父类持有接口成员变量,动态设定接口成员实现类,动态改变方法
- 尝试创建一个父类和子类,分别创建一个构造方法,然后向父类和子类添加成员变量和方法,并总结构造子类对象时的顺序。
- 子类的父类和接口有相同的成员变量
- Java 中子类是否只继承父类的非私有变量和方法?
- Java 中子类是否只继承父类的非私有变量和方法?
- 重写——上转型对象不能操作子类新增成员变量和方法但可以操作子类继承和重写的方法
- 子类的父类和接口有相同的方法
- 成员变量是类时与继承类中父类在子类中内存情况
- java 学习 私有类实现接口 ,一个类继承来的方法和接口实现方法重复第八天
- java 学习 私有类实现接口 ,一个类继承来的方法和接口实现方法重复第八天
- 深入理解子类继承父类中的成员变量问题
- 父类和子类有相同成员变量时的例子