文章目录
abstract关键字
abstract修饰的类叫做抽象类,修饰的方法叫做抽象方法。
抽象方法
抽象方法不提供方法体。
抽象类
抽象类不能实例化,必须通过子类继承以后,使用向上造型进行实例化。
子类继承以后需要重写所有的抽象方法,除非子类也是抽象类。
- 抽象类中可以写构造方法码?可以。
虽然抽象类不能实例化,但是在底层JVM会使用C语言创建一个虚拟的对象给子类使用。 - 抽象类中可以定义普通方法吗?可以。
- 抽象类能被final修饰吗?不能
因为抽象类必须被重写。 - 抽象类能被private修饰吗?不能
因为抽象类必须被重写。 - 抽象方法能被private修饰吗?不能
- 抽象方法可以被static修饰吗?不能
因为抽象类必须被重写。 - 抽象方法可以被final修饰吗?不能
因为抽象类必须被继承。 - 抽象方法可以重载吗?可以
如果抽象方法使用的是默认权限修饰符,那么要求父子类同包。
抽象方法只能存在于抽象类中
如果一个类存在抽象类,那么这个类一定是抽象类。
final关键字
final可以修饰变量、类、方法。
final修饰的变量称之为常量,定义之后不能修改。
final修饰的是引用数据类型时要保证地址不改变。
总结:对于基本数据类型来说,实际值不能改变,对于引用数据类型而言,地址值不能改变。
Java中,常量一般全部大写表示。
final修饰的成员变量要求在对象创建之前完成赋值。
final修饰成员变量的三种方法:
- 直接赋值
final int i = 10;
- 在代码块中赋值
{
i = 10;
}
- 在构造方法中赋值
public A(){
i = 10;
}
final修饰的方法称之为最终方法,不能被重写 /隐藏。可以被继承,可以重载。
final修饰的类称之为最终类不能被继承。
interface接口
在接口的定义的变量默认使用public static final 数据类型 变量名 = 值;
接口就是功能的集合。接口在编译之后会产生.class文件,但是接口不属于类。
接口只描述所应该具备的方法,并没有具体实现。
在JDK1.8之前,接口中所有的方法都是抽象方法,从JDK1.8开始接口中也可以有实体方法
接口不可以直接实例化
接口中的抽象方法,一定是被public abstract修饰的。所以可以省略public abstract
接口中无法定义普通成员变量,必须使用的时候只能用public static final修饰(常量)
接口的使用:向上造型
类和接口之间用的是implements关键字来产生联系的。接口的实现类如果只实现了部分方法,那么实现类需要变成抽象类,然后再找子类实现抽象方法
接口不能有构造方法 interfaces cannot have constructor
在Java中,类和接口之间是多实现,用,隔开
在Java中,接口和接口之间是多继承,用,隔开
面试题:为什么编译期间,任何一个接口都可以强转?
在Java中,因为接口之间是多继承以及类和接口之间是多实现
所以形成的是一个网状结构
在网状结构中,不容易确定两个节点之间的关系
所以为了提高编译效率
Java在编译期间放弃检查
也就意味着,在编译期间,任何一个接口都可以被强转
package包
声明包用的是package–>一个java文件中只能有一个package语句,而且这个package必须放在整个java文件的有效代码的首行
导入包使用的是import
内部类
分为:局部(方法)内部类、成员内部类、静态内部类、匿名内部类。
使用成员内部类格式 外部类.内部类 变量名 = new 外部类().new 内部类();
使用静态内部类格式 外部类.内部类 变量名 = new 外部类.内部类();
在其他类的方法中调用内部类的静态方法格式 外部类.内部类.静态方法名(参数);
匿名内部类 -->没有名字的内部类 ()后面的{}代表匿名内部类
A a = new A(){
public void m(){
}
};
匿名内部类本质上就是实现了对应的接口或者继承了对应的父类
这也就意味着任何一个接口都可以存在匿名内部类形式,任何一个可以被继承的类也可以存在匿名内部类的形式
final修饰的类不能使用匿名内部类,因为无法被继承
静态内部类 -->使用static修饰的内部类
不能使用外部类的非静态变量和非静态方法
可以使用外部类的静态变量和静态方法
可以定义一切的属性和方法
成员内部类
可以使用外部类的一切属性和方法
可以定义非静态变量和非静态方法
不可以定义静态变量和静态方法
可以定义静态常量
成员内部类可以使用一切修饰类的修饰符
方法内部类/局部内部类
可以使用外部类中的一切属性和方法
如果内部类和外部类具有同名的变量,那么采用就近原则
可以定义非静态变量和非静态方法
不可以定义静态变量和静态方法
局部内部类只能被abstract/final的其中一个修饰