课时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来定义参数,此时也表示一个常量的概念。