java中的代码块,继承,方法重写和final关键字

文章目录

        • 代码块
        • 继承
        • 方法重写
        • final关键字

代码块

  • 在Java中,使用{}括起来的代码被称为代码块。

  • 分类

    • 局部代码块 :定义在方法中,可以尽早的释放空间和资源

    • 构造代码块:定义在在类中方法外,每次调用构造时(每创建一个对象)都会执行,并且在构造方法前执行

    • 静态代码块:由static修饰的代码块,属于类本身,在类加载时执行,且仅执行一次。

      class Student {
          static {
              System.out.println("Student 静态代码块");
          }
      
          {
              System.out.println("Student 构造代码块");
          }
      
          public Student() {
              System.out.println("Student 构造方法"); 
          }
      }
      
      class StudentDemo {
          static {
              System.out.println("StudentDemo的静态代码块");
          }
      
          public static void main(String[] args) {
              System.out.println("我是main方法");
      
              Student s1 = new Student();
              Student s2 = new Student();
          }
      }
      
      //结果
      /*
           StudentDemo的静态代码块
          我是main方法
          Student 静态代码块
          Student 构造代码块
          Student 构造方法
          Student 构造代码块
          Student 构造方法
      */
      

继承

  • 通过extends关键字可以实现类与类的继承:
    class 子类名 extends 父类名 {}
  • 继承的特点:
    • Java只支持单继承,不支持多继承,但是支持多层继承
    • 子类只能继承父类所有非私有的成员
    • 子类不能继承父类的构造方法,但是可以通过super关键字(父类空间的标识)去访问父类构造方,并且可以通过super关键字调用父类的成员变量和方法。
    • 子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,需要先完成父类数据的初始化。

方法重写

  • 当子类出现了和父类一摸一样的方法(方法名,参数列表一样,返回值类型一样)就会发生子类的方法覆盖父类的方法,我们也称之为方法重写.
  • 父类中私有方法不能被重写,子类重写父类方法时,访问权限不能比父类低
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("狗子",5,"黑");
        dog.eat();
        dog.run();
        System.out.println("-------------------------------");
        Cat cat = new Cat("猫咪",3,"花色");
        cat.eat();
        cat.run();
    }
}

class Animal{
    String name;
    int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void run(){
        System.out.println("跑步");
    }
}

class Dog extends Animal {
    String colour;

    public Dog() {
    }

    public Dog(String breed, int age, String colour) {
        super(breed, age);
        this.colour = colour;
    }
    public void eat(){
        System.out.println("吃骨头");
    }
}
 class Cat extends Animal {
    String colour;

    public Cat() {
    }

    public Cat(String breed, int age, String colour) {
        super(breed, age);
        this.colour = colour;
    }

    public void eat(){
        System.out.println("吃鱼");
    }
}
//结果:
/*
    吃骨头
    跑步
    -------------------------------
    吃鱼
    跑步
*/

final关键字

  • 被final修饰的类不能被继承
  • 被final修饰的方法不能被重写
  • 被final修饰的变量不能被重新赋值

你可能感兴趣的:(JavaSE)