方法重载、方法重写、四种权限修饰、JavaBean、代码块

方法重载(overload)

  • 一个类中可以含有多个重名的方法。
    两同一不同
    ①同一个类
    ②同一个方法名
    ③不同参数列表:参数个数不同,参数类型不同

方法重写(override)

  • ①子类重写的方法的修饰符大于等于 父类的权限修饰符
  • ②子类不能重写父类中private的修饰符
  • ③父类的被重写的方法的返回值类型是void,则子类重写的父类中方法的返回值类型是void,
    父类的被重写的方法的返回值类型是A,则子类重写的方法返回值类型是A或A的子类
    父类的被重写的方法的返回值类型是基本类型,则子类重写的方法的返回值类型是 相同的基本类型。
  • ④子类重写的方法抛出的异常必须小于等于父类被重写的异常
  • ⑤父类被重写的方法需要是 非静态的方法,这时可以考虑重写。

四种权限修饰

修饰符 类内部 同一个包 不同包子类 同一个工程
private
(缺省)
protected
public
对于class类只能用public和缺省来修饰

javaBean

  • javaBean: 类是公共的、有一个无参的公共的构造器、有属性,且有对应的set和get方法。

代码块

  • 静态代码块:
    ①随着类的加载而执行,且只执行一次
    ②静态代码块可以定义多个,且按照声明的先后顺序执行
    ③静态代码块内只能调用静态属性、方法
  • 非静态代码块
    ①随着对象的创建而执行,创建一个对象,执行一次
    ②非静态代码块可以定义多个,且按照声明的先后顺序执行
    ③非静态代码块可以调用静态和非静态属性和方法
    没有继承的初始化顺序


    有继承的初始化顺序

class Person{
    String name;
    int age;
    static String dec;
     
    public Person(){
    }

    public Person(String name, int age){
      this.name = name;
      this.age = age;
    }
    
    //静态代码块
    static{
      System.out.println("静态代码块");
    }
      
    //非静态代码块
    {
      System.out.println("非静态代码块");
    }

    public void info1(){
      System.out.println("info1");
    }

    public static void info2(){
      System.out.println("info2");
    }
}

/** 测试
Test1
  Person.dec = "abc";   
    则结果输出:静态代码块

Test2
  Person person = new Person(); 
  则结果输出:
    静态代码块
    非静态代码块

Test3

  Person person = new Person();
  Person person2 = new Person();
  输出结果:
      静态代码块
      非静态代码块
      非静态代码块
*/

练习一

package com.hyq;

public class Test {
    public static void main(String[] args) {
        new Leaf();
        System.out.println();
        //new Leaf();
    }
}

class Root{
    static {
        System.out.println("Root的静态代码块");
    }
    {
        System.out.println("Root的非静态代码块");
    }
    public Root(){
        System.out.println("Root的无参构造器");
    }
}
class Mid extends Root{
    static {
        System.out.println("Mid的静态代码块");
    }
    {
        System.out.println("Mid的非静态代码块");
    }
    public Mid(){
        System.out.println("Mid的无参构造器");
    }
    public Mid(String msg){
        this();
        System.out.println("Mid的有参构造器,参数="+msg);
    }
}
class Leaf extends Mid{
    static {
        System.out.println("Leaf的静态代码块");
    }
    {
        System.out.println("Leaf的非静态代码块");
    }
    public Leaf(){
        super("啦啦啦");
        System.out.println("Leaf的构造器");
    }
}

//super没有显式写明的话,默认调用的是无参构造器。
/** 一个new Leaf()的输出结果:
Root的静态代码块
Mid的静态代码块
Leaf的静态代码块
Root的非静态代码块
Root的无参构造器
Mid的非静态代码块
Mid的无参构造器
Mid的有参构造器,参数=啦啦啦
Leaf的非静态代码块
Leaf的构造器
*/

/** 2个new Leaf()的输出结果:
Root的静态代码块
Mid的静态代码块
Leaf的静态代码块
Root的非静态代码块
Root的无参构造器
Mid的非静态代码块
Mid的无参构造器
Mid的有参构造器,参数=啦啦啦
Leaf的非静态代码块
Leaf的构造器

Root的非静态代码块
Root的无参构造器
Mid的非静态代码块
Mid的无参构造器
Mid的有参构造器,参数=啦啦啦
Leaf的非静态代码块
Leaf的构造器
*/
posted @ 2021-01-23 16:35  先生胡  阅读(165)  评论(0编辑  收藏  举报