再生与终结-初识属性覆盖与final | 带你学《Java面向对象编程》之四十一

简介: 本节将为读者介绍属性覆盖和final关键字相关内容,并为读者展示如何在Java中定义一个“常量”。

上一篇:规则之间-方法覆写限制 | 带你学《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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你从实战中领悟继承(上) | 带你学《Java面向对象编程》之四十二
更多Java面向对象编程文章查看此处

相关文章
|
2月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
41 2
|
11天前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
58 15
|
11天前
|
Java 数据安全/隐私保护 开发者
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
32 3
|
2月前
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
207 63
|
1月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
JSON 前端开发 JavaScript
Java属性为什么不能是is开头的boolean
在Java实体类中,阿里规约要求boolean属性不应以is开头。文章通过实际案例分析了isUpdate字段在JSON序列化过程中变为update的问题,并提供了自定义get方法或使用@JSONField注解两种解决方案,建议遵循规约避免此类问题。
Java属性为什么不能是is开头的boolean
|
2月前
|
Java
final 在 java 中有什么作用
在 Java 中,`final` 关键字用于限制变量、方法和类的修改或继承。对变量使用 `final` 可使其成为常量;对方法使用 `final` 禁止其被重写;对类使用 `final` 禁止其被继承。
50 0
|
3月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
50 3
|
3月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
3月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
56 2