一、类与对象
1.1 类的定义和实例化
1.1.1 类的修饰符
1) public:公共的
每一个.java文件只能有一个public修饰的类,并且类名和文件名称一致
**2)abstract:**抽象的
a. 使用这个修饰符之后,变为抽象类
b. 不能用abstract修饰变量、代码块、构造器;
c. 不能用abstract修饰私有方法、静态方法、final的方法、final的类
3)final:最终的
使用final修饰类,类不能被修改,即不能被继承,别名”太监类“
1.1.2 实例化
关键字:new
new 构造器(参数列表)来实例化对象
例如:
Xxx xx=new Xxx();
1.2 抽象类 & 抽象方法
1.2.1 概述
抽象类:即使用abstract关键字修饰的类。
抽象方法:
1)即使用abstract关键字修饰的方法。
2)抽象方法没有方法体。
注意:
1)如果一个类中有抽象方法,那么该类应该定义为抽象类(接口中全为抽象方法)
2)抽象类不能被实例化。
3)抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。
4)若没有重写全部的抽象方法,仍为抽象类。
1.2.2 代码举例
public abstract class Dome_abstract {
//抽象类可以有构造方法
public Dome_abstract() {
}
//抽象方法
public abstract void method();
}
class A extends Dome_abstract{
@Override
public void method() {
//继承之后需要重写,添加方法体,否则必须定义为抽象类
}
}
1.3 接口
1.3.1 概念
-
为什么引入接口?
在java里面是不支持多继承的,一个子类只能继承一个父类,这就产生了很大局限性; -
接口是什么?
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须能…”的思想。
继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系。
接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都要遵守。
1.3.2 如何定义一个接口
接口(interface)是抽象方法和常量值定义的集合。
接口的特点:
用interface来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有抽象方法都默认是由public abstract修饰的。
接口中没有构造器。
接口采用多继承机制。
举例:
interface demo{
//public static final Integer i=0;
Integer i=0;
//public abstract void method();
void method();
}
1.3.3 抽象类和接口的区别
JDK8.0接口的新特性
静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行其方法体。我们经常在相互一起使用的类中使用静态方法。你可以在标准库中
找到像Collection/Collections或者Path/Paths这样成对的接口和类。
默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用。在已有的接口中提供新方法的同时,还保持了与旧版本代码的兼容性。
比如:java 8 API中对Collection、List、Comparator等接口提供了丰富的默认方法。
代码举例
interface A{
public default void say() {
System.out.println("A");
}
public static void method() {
System.out.println("JDK8.0");
}
}
interface B{
public default void say() {
System.out.println("B");
}
}
public class Dome_interface implements A,B{
@Override
public void say() {
System.out.println("dome");
A.super.say();
B.super.say();
}
}
注意
1)实现接口中的默认方法冲突
如果细心观察,就会发现,在上面的代码中,接口A,B中都有默认方法say()
当Dome_interface类实现两个接口的时候,就会出现默认方法冲突,此时,可以通过上面的方式解决。
2)继承类和默认方法冲突
此时会根据类优先法则,自动忽略接口中的默认方法