关键词:
1.final
继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override:
- final修饰的方法可以阻止被覆写;
- final修饰的class可以阻止被继承;
- final修饰的field必须在创建对象时初始化,随后不可修改。
2.Override
Override和Overload不同的是,如果方法签名如果不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override。
3.extends
关键字来实现继承
4.protected
用protected修饰的字段可以被子类访问:
(子类无法访问父类的private字段或者private方法)
5.Overload
这种方法名相同,但各自的参数不同,称为方法重载(Overload)
6.private
外部代码不能直接读取private字段,但可以通过getName()和getAge()间接获取private字段的值
private方法不允许外部调用
private方法的理由是内部方法是可以调用private方法的
7.abstract
法声明为abstract,表示它是一个抽象方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法。
因为无法执行抽象方法,因此这个类也必须申明为抽象类。
使用abstract修饰的类就是抽象类。我们无法实例化一个抽象类。
从抽象类继承的子类必须实现抽象方法。
如果不实现抽象方法,则该子类仍是一个抽象类。
8.interface
abstract class Person {
public abstract void run();
public abstract String getName();
}
如果一个抽象类没有字段,所有方法全部都是抽象方法,
就可以把该抽象类改写为接口:interface。
interface Person {
void run();
String getName();
}
所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。
9.implements
当一个具体的class去实现一个interface时,需要使用implements关键字
10.default
实现类可以不必覆写default方法。default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。
default方法和抽象类的普通方法是有所不同的。因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。
11.static
静态变量:
对于静态字段,无论修改哪个实例的静态字段,效果都是一样的:所有实例的静态字段都被修改了,原因是静态字段并不属于实例:
屏幕快照 2019-08-24 上午9.37.40.png推荐用类名来访问静态字段。可以把静态字段理解为描述class本身的字段(非实例字段
静态方法:
调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。静态方法类似其它编程语言的函数。
接口的静态字段
因为interface是一个纯抽象类,所以它不能定义实例字段。但是,interface是可以有静态字段的,并且静态字段必须为final类型:
public interface Person {
public static final int MALE = 1;
public static final int FEMALE = 2;
}
实际上,因为interface的字段只能是public static final类型,所以我们可以把这些修饰符都去掉,上述代码可以简写为:
public interface Person {
// 编译器会自动加上public statc final:
int MALE = 1;
int FEMALE = 2;
}
编译器会自动把该字段变为public static final类型。
网友评论