java基础笔记-类与对象(继承)

继承:

  当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成 一个公共类,让多个类吸收公共类中已有特征和行为而在多个类型只需 要编写自己独有特征和行为的机制,叫做继承。

在Java语言中使用extends(扩展)关键字来表示继承关系。

public class Worker extends Person{}  - 表示Worker类继承自Person类

其中Person类叫做超类、父类、基类。

其中Worker类叫做派生类、子类、孩子类。

继承的特点:

  a.子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承 只是不能直接访问。

  b.子类默认调用父类的无惨构造,相当于调用super(),如果想要调用父类的有参构造,需要手动在第一行添加 super(父类构造参数) ;

  c.使用继承 ,必须符合 is a 的关系

  d. 一个子类只能有一个父类,不支持多继承

子类的子类叫间接子类。

 

重写:

  super.show()  //调用父类的show 方法

  使用 @Override 标注

重写原则:

  返回值类型,方法名,参数列表相同,从java5 开始,返回值类型可以是子类型

  访问权限不能变小,可以相同或者变大

  不能抛出更大的异常

 

构造块块,静态代码块,构造方法 执行顺序例子:

package com.lagou.task08;

public class SuperTest {

    {
        System.out.println("构造块");
    }
    static {
        System.out.println("静态代码块");
    }
    public  SuperTest(){
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        SuperTest st= new SuperTest();
    }
}
package com.lagou.task08;
/*
* 先加载父类,再加载子类
* 执行顺序:
* --》父类静态代码块--》子类静态代码块
* --》父类构造块--》父类构造方法
* --》子类构造块--》子类构造方法
*
* */
public class SubSuperTest extends SuperTest {
    {
        System.out.println("======构造块");
    }
    static {
        System.out.println("=========静态代码块");
    }
    public  SubSuperTest(){
        System.out.println("====构造方法");
    }

    public static void main(String[] args) {
        SubSuperTest st= new SubSuperTest();
    }

}

执行结果:

  =========静态代码块
  构造块
  构造方法
  ======构造块
  ====构造方法

权限修饰符:

 

public 可以在任意位置访问

protected  不在一个包中也没有父子关系才不能访问

默认  的只能在本类和同一个包中的类访问,注意默认的子类也不能访问

private 只能在本类内部使用

 

 

import 静态方法

import static java.lang.System.out

 

final 关键字修饰的类 不能被继承

final 关键字修饰的方法不能被重写,可以被继承

final 关键字修饰成员变量,必须初始化,且不能被改变(防止成员变量被改变)

  可以显式初始化,即声明的同时进行初始化

  可以在构造块中初始化

  可以在构造方法中初始化

常量一般使用  public static final 修饰

package com.lagou.task08;

public class FinalMemberTest {
//    private final int cnt = 1; // 显式初始化
    private final int cnt;

    /*{
        cnt = 2;  // 构造块中进行初始化
    }*/

    public FinalMemberTest() {
        cnt = 3; // 构造方法体中进行初始化
    }

    public static void main(String[] args) {

        // 声明FinalMemberTest类型的引用指向该类的对象
        FinalMemberTest fmt = new FinalMemberTest();
        // 打印成员变量的数值
        System.out.println("fmt.cnt = " + fmt.cnt); // 0  1  2  3
    }
}

 

补充内容:

子类和父类共有的属性,使用super区分
本类的属性,this.
父类的属性,super.

 

 文章来自拉勾教育 大数据开发

   

 

 

 

 

 

 

  

 

posted @ 2021-03-23 20:26  wangheng1409  阅读(83)  评论(0编辑  收藏  举报