javaSE 笔记 继承 + super + 包 + import + 修饰符 + final + static

继承

例子:public class Zi extends Fu { }
子类可以使用父类的属性和方法(暂不讨论权限修饰符)
继承可以提高代码的复用性和维护性,但是也因此让父类,子类直接耦合性增强,父类变化,子类也会变化,所以看情况使用。
继承中子类变量,成员方法的访问特点:子类局部范围->子类成员范围->父类成员范围->都没有就报错(排除父亲的父亲)
目前看到的例子都是子类继承了父类的一些构造方法,感觉还是有点low,得多见识见识。

super

this 本类对象引用 ; super 父类对象引用
当子类中的局部变量与成员属性名字相同,通过调用this.age就可以使用成员属性的值;如果子类中的局部变量与父类的成员属性名字相同,通过调用super.age就可以使用父类成员属性的值。成员方法同理,super.call(name)

  • 子类一开始默认有super(),即调用父类的无参构造方法,不过还是推荐子类自己定义自己的无参构造方法。
  • 当子类和父类中有相同的成员变量的时候,在堆内存,两者是保存在不同的内存空间中的。黑马视频课P156。
  • 如果子类既想要自己的特殊方法,直接方法重写就好了

子类重写注意事项

子类重写的方法的访问权限不能比父类低

子类继承注意事项

与C++不同的吕布继承法不同,java支持单继承,不支持多继承,但是支持多层继承,就是套娃。

例子 package com.itlcy 多级包用.分开
带包的类 直接javac编译可以,但是java运行不行,要么手动导包,将HelloWorld.class文件放到包的里面,要么自动导包,在编译的时候用java -d . HelloWorld.java ,加上这个-d之后就能够将class文件自动生成在包的目录下。

import导包

不导包:java.util.Scanner sc = new java.util.Scanner(System.in)
导包: import java.util
Scanner sc = new Scanner(System.in) 即可以直接用Scanner类

修饰符

|修饰符|同类|同类不同包|不同包子类|不同包非子类|
|private| √ | × | × | × |
|default| √ | √ | × | × |
|protected| √ | √ | √ | × |
|public| √ | √ | √ | √ |
从下到上看的话,权限越来越小

final

父类中被final修饰的方法,在子类中是不可以被重写的。
final 修饰的成员变量也不能再改变。
final 修饰类,不能再被继承,断子绝孙了。。
final和const十分像,看其修饰的到底是值还是地址,修饰谁,谁就不能再改变了。

static

类的一个成员被static修饰后,相当于所有对象共享这一个变量。
静态成员方法只能访问静态成员变量和静态成员方法,非静态的啥都能访问。

上一篇:Python——super


下一篇:react 中的 super super(props)