- 为了避免向下转型出错,Java提供了
instanceof
操作符,可以先判断一个实例究竟是不是某种类型。
可以使用instanceof操作符判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。 - 加上
@Override
可以让编译器帮助检查是否进行了正确的覆写。希望进行覆写,但是不小心写错了方法签名,编译器会报错。但是@Override
不是必需的。 - 多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。
-
final
修饰符有多种作用:
fina
l修饰的方法可以阻止被覆写;
final
修饰的class
可以阻止被继承;
final
修饰的field
必须在创建对象时初始化,随后不可修改。 - 继承
extends
继承有个特点,就是子类无法访问父类的private
字段或者private
方法。我们需要把private
改为protected
。protected
关键字可以把字段和方法的访问权限控制在继承树内部,一个protected
字段和方法可以被其子类,以及子类的子类所访问。
-super
super
关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName
。
任何class
的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super()
;,所以,Student
类的构造方法实际上是这样:
class Student extends Person {
protected int score;
public Student(String name, int age, int score) {
super(); // 自动调用父类的构造方法
this.score = score;
}
}
- 抽象类
abstract
因为抽象类本身被设计成只能用于被继承,不能被实例化。因此,抽象类可以强迫子类实现其定义的抽象方法(没有具体执行代码),否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。 - 接口
interface
所谓interface
,就是比抽象类还要抽象的纯抽象接口,因为它连实例字段都不能有。因为接口定义的所有方法默认都是public abstract
的,所以这两个修饰符不需要写出来。
当一个具体的class
去实现一个interface
时,需要使用implements
关键字。
在Java
中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个interface
。
抽象类是对本质的抽象,接口是对动作的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。
使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
abstract class | interface |
---|---|
只能extends一个class | 可以implements多个interface |
可以定义实例字段 | 不能定义实例字段 |
可以定义抽象方法 | 必须定义抽象方法 |
可以定义普通方法 | 不能定义普通方法 |
可以包含初始化块 | 不能包含初始化块 |
可以定义非抽象方法 | 可以定义default方法 |
注意:接口中定义函数,而在抽象类中定义默认的实现
default
方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default
方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。
- 静态字段和静态方法
static
实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。
静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
class Test{
public static int z(int xx,int yy){
return xx+yy;
}
public int zz(int xx,int yy){
return xx+yy;
}
}
public class mainClass{
int sum;
public static void main(String args[]){
sum=Test.z(1,2); //直接用 类.方法或者属性就可以使用该方法或属性。
System.out.print(sum);
Test t=new Test();
sum=t.zz(1,2); //因为zz不是静态方法,只能只能用Test类创建一个t对象,然后调用该对象的方法。
System.out.print(sum);
}
}
因为interface
是一个纯抽象类,所以它不能定义实例字段。但是,interface
是可以有静态字段的,并且静态字段必须为final类型。
public interface Person {
public static final int MALE = 1;
public static final int FEMALE = 2;
}
-
protected
protected
作用于继承关系。定义为protected
的字段和方法可以被子类访问,以及子类的子类。 -
classpath
和jar
JVM
通过环境变量classpath
决定搜索class
的路径和顺序;
jar
包相当于目录,可以包含很多.class
文件,方便下载和使用;
jar
只是用于存放class
的容器,它并不关心class
之间的依赖。
JAVA中的变量和常量
网友评论