Java--继承2
想分享一下关于继承的知识:
一、代码块知识里说到的静态实例构造执行顺序在继承体系下同样奏效
接下来我们创建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修饰的东西可以在不同包中的子类被访问
更多推荐




所有评论(0)