想分享一下关于继承的知识:

  一、代码块知识里说到的静态实例构造执行顺序在继承体系下同样奏效

接下来我们创建demo1这个包,创建测试类:Test  子类:Dog  Cat  父类:Animal

public class Animal {
    static {
        System.out.println("Animal static");
    }

    {
        System.out.println("Animal");
    }

    public Animal(){
        System.out.println("Animal go");
    }
}
public class Dog {
    static {
        System.out.println("Dog static");
    }

    {
        System.out.println("Dog");
    }

    public Dog(){
        System.out.println("Dog go");
    }
}
public class Test {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        Dog d2 = new Dog();
    }
}

我们创建了两个对象,发现打印结果为:

父类静态内容

子类静态内容

父类实例内容

父类构造内容

子类实例内容

子类构造内容

父类实例内容

父类构造内容

子类实例内容

子类构造内容

我们发现,静态内容全程只执行一次,其余的情况也和代码块的例子一模一样(静态内容>实例内容>构造内容)

二、toString

  假设此时我们有这样一个类

public class Cat {
    
   public int age;
   public String name;
   
}

此时我们在类中,方法外,右键找到Generate,选择toString,点击OK就会生成

public class Cat {

   public int age;
   public String name;

    @Override
    public String toString() {
        return "Cat{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

正常我们创造一个对象 Cat c1 = new cat();时,打印c1发现是一串类似地址的东西,这串代码是储存在栈区中,指向堆区的代码的地址,但如果我们创造了toString,打印c1发现打印出了这个对象的信息而不是地址,对应着Cat类里toString的返回字符串内容

三、final

被final修饰的变量会变成常量,无法再被修改

public class Test {
    public static void main(String[] args) {
        final int a = 10;
       // a=20;
        System.out.println(a);
    }
}

同样的,我们把final用在类上,那么这个类之后将无法再被继承,相关语法:

public final class Dog extends Animal

此时Dog这个类无法再被别的类继承

四、继承最后的一点小知识

  Java中不支持一个类多继承,也就是一个子类无法继承多个父类,除非创造接口,不过这要后面再说了,我还没学到。

继承可以看做 is a,a part of两个类型

public class Dog extends Animal

比如说这一条,把extends看成is a,读出来就是Dog is a Animal

不过工作我们大部分用的还是a part of,也就是谁是谁的一部分

五、protected

  这是我学到的第四个修饰符,他的权限没有public大,又没有default小,为什么要把他放在学到继承这个知识再说呢,因为protected的访问权限跟继承有关系,被protected修饰的东西可以在同一包的同类或不同类被访问,但在跨包访问的话就和继承有关,因为被protected修饰的东西可以在不同包中的子类被访问                                                                 

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐