课时63:方法覆写
子类与父类一旦产生继承关系之后,实际上子类会继承父类中的全部定义,但是这里面也有可能出现不合适的场景,子类如果发现与父类中设计不足,并且需要保留父类中的方法或属性名称的情况下,就会发生覆写。
当子类定义了与父类方法名称相同、参数类型及个数完全相同的时候(跟父类一模一样),就称为方法的覆写。
package test;
class Channel{
public void connect(){
System.out.println("【Channel父类】进行资源的链接。");
}
}
class DatebaseChannel extends Channel{
public void connect(){ //保留已有方法名称,而后进行覆写
System.out.println("【子类】重写的链接");
}
}
public class example {
public static void main(String[] args) {
DatebaseChannel channel = new DatebaseChannel();
channel.connect();
}
}
只要是子类调用父类方法的时候一定要在方法前追加"super.方法()"
package test;
class Channel{
public void connect(){
System.out.println("【Channel父类】进行资源的链接。");
}
}
class DatebaseChannel extends Channel{
public void connect(){ //保留已有方法名称,而后进行覆写
super.connect();
System.out.println("【子类】重写的链接");
}
}
public class example {
public static void main(String[] args) {
DatebaseChannel channel = new DatebaseChannel();
channel.connect();
}
}
课时64:方法覆写限制
虽然利用方法的覆写可以更好的扩充父类的功能,但是对于覆写也是有其自身要求的:被覆写的方法不能够拥有比父类方法更为严格的访问控制权限。
目前接触过的三种访问控制权限:public>default(什么都不写,默认default,比如 String name;)>private
子类的成员不能缩小父类的访问权限。
实际开发中95%的情况下都使用public方法,覆写最好也考虑用public
面试题:Override 与 Overloading区别?Overloading时返回参数是否相同?
NO. | 区别 | Overloading(超载) | Override(覆盖) |
1 | 中文含义 | 重载 | 覆写 |
2 | 概念 | 方法名称相同,参数的类型及个数不同 | 方法名称、参数类型、个数、返回值 相同 |
3 | 权限 | 没有权限限制 | 被覆写方法不能拥有更严格的控制权限 |
4 | 范围 | 发生在一个类中 | 发生在继承关系类中 |
方法重载的时候并没有对返回类型作出限制,但是好的习惯应该保持返回类型的一致,以便处理。
课时65:属性覆盖
当子类定义了与父类相同名称的成员时就称为属性覆盖。
不封装属性的情况下
package test;
class Channel{
String info = "Bsciology";
}
class DatebaseChannel extends Channel{
String info = "Helloworld";
public void fun(){
System.out.println(this.info); //覆盖
System.out.println(super.info); //访问父类
}
}
public class example {
public static void main(String[] args) {
DatebaseChannel channel = new DatebaseChannel();
channel.fun();
}
}
封装属性的情况下,相当于子类定义了新的属性,和父类没有关系。
package test;
class Channel{
private String info = "Bsciology";
public String getInfo(){
return this.info;
}
}
class DatebaseChannel extends Channel{
String info = "Helloworld";
public void fun(){
System.out.println(this.info); //覆盖
System.out.println(super.getInfo() ); //访问父类
}
}
public class example {
public static void main(String[] args) {
DatebaseChannel channel = new DatebaseChannel();
channel.fun();
}
}
super与this的区别?
1、this表示先从本类查找所需要的属性或方法,如果本类不存在,则查找父类定义;super表示直接查找父类。
2、this和super都能够进行构造方法的调用,但是this()调用的是本类构造方法,super()是由子类调用父类构造。 两个语句都必须放在构造方法的首行,所以不能同时出现。
3、this可以表示当前对象,super没有这个概念。
课时66:final关键字
final在程序之中描述的是种终结器的概念,在Java里面使用final关键字可以实现如下功能:
定义不能够被继承的类;定义不能够被覆写的方法、常量。
使用final定义不能被继承的父类:
定义全局常量:全局常量每一个字母必须大写;
public static final int OFF = 0 ;
public static final int ON = 1;
public class JavaDemo{
public static voiu main (String args[]){
String info = "csdn";
String strA = "www.csdn.net";
String strB = "www." + info + ".net";
System.out.println(strA == strB); //false
}
}
public class JavaDemo{
public static voiu main (String args[]){
final String info = "csdn";
String strA = "www.csdn.net";
String strB = "www." + info + ".net";
System.out.println(strA == strB); //true
}
}
在方法的时候也可以使用final来定义参数,此时也表示一个常量的概念。