修饰符,继承,接口

访问控制符/权限修饰符

概述

java中提供了四种不同的访问控制符
修饰类、成员变量、成员方法、构造方法
public
公开的,公共的。想要提供给其他类使用的成员

protected
受保护的。想要给子类继承的成员

default
默认的。不加default关键字,不常用,不写任何内容
private
私有的。所有的普通成员变量

不同权限的访问能力

修饰符,继承,接口
权限范围由大到小: public->protected->default->private。
private修饰的成员变量只能被同一类里访问到,default则是能在同一个包中被访问到,protected则是同一个包中和其他包中的子类能访问到,public 则是所有都能访问到。

状态修饰符

final
可修饰类,方法,成员变量,局部变量,不可修饰构造方法。
被修饰的类不可被继承。修饰方法: 方法不能被重写
成员变量: 变量不能被修改, 必须初始化
局部变量: 变量不能被修改, 必须初始化
final修饰定义变量需要初始化数值,不可变。修饰引用类型变量,只能指向一个对象,但可以改变对象内部的成员变量值。如 final Student a=new Student();不可以再给a新的对象(a=new Student();会报cannot assign to final variable’A’)但可以改变a对象的成员变量值,如a.age=20.

static
可修饰方法,成员变量,不可修饰类,不可修饰构造方法。
修饰的方法和方法可直接通过被修饰类名来调用。如常用的Math.PI.

抽象修饰符

abstract
抽象的意思,可以修饰类,成员方法 ,不能修饰构造方法,不能修饰成员变量。
抽象类:
abstract class 类名{}
类中如果有抽象方法, 类就一定是抽象类
不能实例化,只能被继承, 有构造方法
被修饰的成员方法在子类中必须全部被重写

抽象方法:
abstract void abstractMethod();
没有方法体,需要使用 abstract 来修饰。

继承

extends
继承是子类继承父类的特征和行为,并且使子类的对象具有父类的实例和方法。
父类: 子类*同的成员变量, 成员方法
子类: 会继承父类中所有的成员变量和成员方法
一个子类子类继承了父类后,可以拥有父类非private的属性和方法,可以节省代码量。如果需要新的方法可以在子类中进行扩展,也可以·在子类中重写父类方法。
class 父类{
}

class 子类 extends 父类{
}
super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。如super.方法();
this关键字:指向自己的引用。
所有的类都是继承于 java.lang.Object

重写

父子类继承中注意的重写
静态方法或者说是类方法(static修饰的)不存在重写
子类中的方法名和参数列表要与父类中的一致
@override可以帮助检测是否为合理的方法重写
子类的重写方法权限要大于或等于父类的权限
子类中的返回值要小于父类中的返回值类型(基础数据类型必须要相等,引用数据类型可以小于等于父类的返回值类型)
可以Fu fu=new Zi(); 不能Zi zi=new Fu();(和后面可能上课讲的多态相关)

接口

接口: 特殊的抽象类
抽象类可能有抽象方法(也可以有非抽象方法的),但有抽象方法的一定是抽象类
不论什么版本
接口中可以有
1.公开的抽象方法
2.公开的静态常量

JDK8 开始
3.静态的方法 static
属于接口的, 通过接口直接调用
4.默认的方法 default
通常用来做接口功能的扩展, 可以在实现类中覆盖
修饰符,继承,接口
修饰符,继承,接口
修饰符,继承,接口
第一张InterfaceAbstractA接口有抽象方法abstractMethod1(),abstractMethod(),一个默认抽象方法method2(),一个静态方法method3()。
DK9 开始
私有方法 private
普通的私有方法: 为了给default方法中的公共代码提取, 实现代码复用
静态的私有方法: 给static方法中公共代码提取的

关系:
1.类和接口: 1 v n implements 实现
2.类和类 : 1 v 1 extends 继承
3.接口和接口: 1 v n extends 继承
4.接口和类: 没有