上一篇:规则之间-方法覆写限制 | 带你学《Java面向对象编程》之四十
【本节目标】
通过阅读本节内容,你将了解到属性覆写的概念,并初步了解并使用final达到一些特殊场景的需求,学会使用final搭配static定义一个全局常量。
属性覆盖
当子类定义了与父类相同名称的成员时候就称为属性覆盖。
范例:观察属性覆盖
class Channel {
String info = “www.mldn.cn” ;
}
class DatabaseChannel extends Channel { //要进行数据库的连接
String info = “HelloMLDN” ; //名称相同
public void fun() {
System.out.println(super.info) ; // www.mldn.cn
System.out.println(this.info) ; // HelloMLDN
}
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel = new DatabaseChannel () ;
channel.fun() ;
}
}
如果这个时候按照标准的开发属性进行了封装。这个时候实际上子类就和父类中的私有属性没什么关系了,即使名称一样,也只是相当于子类定义了一个新的属性而已。
class Channel {
private String info = “www.mldn.cn” ;
public String getInfo() {
return this.info ;
}
}
class DatabaseChannel extends Channel { //要进行数据库的连接
String info = “HelloMLDN” ; //名称相同
public void fun() {
System.out.println(this.info) ; // HelloMLDN
System.out.println(super.getInfo()) ; // www.mldn.cn
}
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel = new DatabaseChannel () ;
channel.fun() ;
}
}
面试题:请解释super与this的区别?
- 在程序类中使用this表示先从本类查找所需要的属性或方法,如果本类不存在,则查找父类定义。如果使用super则表示不查找子类,直接查找父类;
- this与super都可以进行构造方法的调用,但是this()调用的是本类构造,而super()是由子类调用父类构造,两个语句都必须放在构造方法的首行,所以不能够同时出现。
- this可以表示当前对象。
final关键字
final在程序之中描述的是种终结器的概念,在Java里面使用final关键字可以实现如下的功能:定义不能够被继承的类、不能够被覆写的方法、常量。
范例:使用final定义不能被继承类
final class Channel { //这个类不能够有子类
}
class DatabaseChannel extends Channel { //错误的
}
当子类继承父类之后实际上是可以进行父类中方法覆写的,但是如果不希望某一个方法被子类所覆写,就可以使用final来进行定义。
范例:定义不能够被覆写的方法
class Channel { //这个类不能够有子类
public final void connect () {
}
}
class DatabaseChannel extends Channel { //错误的
public void connect () {}
}
在有一些系统开发之中,可能使用1表示开关打开、使用0表示开关关闭,但是如果说现在要是直接操作0或者1,则会造成混乱。所以就希望可以通过一些名称来表示0或者1。在final关键字里面有一个重要的应用技术:可以利用其定义常量,常量的内容一旦定义则不可修改。
范例:使用final定义常量
class Channel { //这个类不能够有子类
private final int ON = 1 ; //ON就是常量
private final int OFF =0 ; //OFF就是常量
public final void connect () {
ON = 2 ; //程序出错
}
}
实际上常量往往都是公共的定义,所以为了可以体现出共享的概念,往往会使用一种全局常量的形式来定义,使用public static final来定义全局常量。
class Channel { //这个类不能够有子类
public static final int ON = 1 ; //ON就是常量
public static final int OFF =0 ; //OFF就是常量
}
在定义全局常量的时候每一个字母必须大写表示。
范例:观察一个程序代码
public class JavaDemo{
public static void main(String args[]) {
final String info = “mldn” ;
String strA = “www.mldn.cn” ;
String strB = “www. “+ info + “.cn” ;
System.out.println(strA == strB) ; //true
}
}
在方法的时候也可以使用final来定义参数,此时也表示一个常量的概念。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学