当子类定义了与父类相同名称的成员时候就称为属性覆盖。
范例:观察属性覆盖
class JavaDemo
{
public static void main(String[] args)
{
//子类的调用
DatabaseChannel Dat = new DatabaseChannel();
Dat.fun();
}
}
class Channel
{
String info = "www.mldn.cn";
}
class DatabaseChannel extends Channel
{
String info = "HellowMLDN";//名称相同
public void fun(){
System.out.println(this.info);//本类
System.out.println(super.info);//父类
}
}
如果这个时候按照标准的开发属性进行了封装。
class JavaDemo
{
public static void main(String[] args)
{
//子类的调用
DatabaseChannel Dat = new DatabaseChannel();
Dat.fun();
}
}
class Channel
{
private String info = "www.mldn.cn";
public String getInfo(){
return this.info;
}
}
class DatabaseChannel extends Channel
{
String info = "HellowMLDN";//名称相同
public void fun(){
System.out.println(this.info);//本类
System.out.println(super.getInfo());
}
}
实际上这个时候子类和父类中的私有属性没有什么关系了,即便名称一样也只是相当于子类创建了一个新的属性而已。
面试题:请解释super和this的区别?
- 在程序类中使用this表示先从本类查找所需要的属性和方法,如果本类不存在则查找父类定义,如果super则表示不查找子类直接查找父类;
- this与super都可以进行构造方法的调用,但是this()调用的是本类构造,而super()是由子类调用父类构造,都应该放在否早方法的首行,且不能同时出现。
- this可以表示当前对象。