再生与终结-初识属性覆盖与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面向对象编程文章查看此处

相关文章
|
12小时前
|
Java
Java 面向对象编程:你真的懂类和对象吗?
【6月更文挑战第15天】Java的面向对象编程聚焦于类与对象。类是共享属性和行为的抽象,如`Person`类含名字和年龄。对象是类的具体实例,如`person1`和`person2`各有独特的属性值。设计类时要考虑扩展性,以便适应变化,如添加“性别”属性。对象管理涉及保持其状态和行为的正确性。继承允许类如`Student`扩展`Person`,增加新特性。理解面向对象不仅是创建和使用,更是关于设计和架构的智慧。
|
20小时前
|
Java Apache
Java将一个对象的属性复制到另一个对象,如何编码
【6月更文挑战第15天】Java将一个对象的属性复制到另一个对象,如何编码
7 3
|
3天前
|
Java 编译器
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
8 0
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
|
3天前
|
缓存 安全 Java
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(一)
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(一)
10 0
|
7天前
|
机器学习/深度学习 Java 开发者
Python vs. Java:语言之争的终结
【6月更文挑战第8天】Python与Java,两种影响力巨大的编程语言,各有千秋。Python以简洁语法和强大库支持在数据科学、机器学习领域大放异彩,适合快速原型设计;而Java以其稳定性能、跨平台兼容性在大型系统、企业应用中占据一席之地。语言之争实为互补,开发者应根据项目需求选择合适工具,两者和谐共存,共同推动编程技术进步。
|
8天前
|
Java
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
10 0
|
9天前
|
缓存 Java
Java Swing 2D系统属性参数详解
Java Swing 2D系统属性参数详解
12 0
|
13天前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
15天前
|
Java
深入探索Java语言的面向对象编程
深入探索Java语言的面向对象编程
|
16天前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石