文章目录
接口
(01)接口:被interface
修饰叫做接口。
接口:用接口表示现实生活中的【标准】或【规范】。(目的在于统一标准)
(02)成员变量:默认被public static final修饰。
注意:接口中的成员变量被static修饰,说明是静态的,属于类,就是说只有一份(可以参照CSDN中的Java的static关键字理解),被final修饰说明是常量,不可更改。
由于接口的成员变量默认被public static final
修饰,所以可以使用接口文件定义全局静态变量,如下代码:
public interface Constants {
String str1 = "A";
String str2 = "B";
String str3 = "C";
}
上述代码的效果和下面是一样的:
public class Constants {
public static final String str1 = "A";
public static final String str2 = "B";
public static final String str3 = "C";
}
(03)成员方法:默认被**public abstract**修饰。
注意:接口中的所有方法默认被abstract修饰,即所有的方法都是抽象方法,说明没有方法体。
public interface Person {
public static final int a = 100;//实际项目中public static final可以省去
public abstract void m(double d);//实际项目中public abstract可以省去
}
(04)接口中**没有构造方法、不能创建对象**。
思考:接口不能创建对象、那么接口有什么用?答:纯设计。
(05)类(具体类和抽象类)使用**implements**实现关键字来实现接口。
理解:先用接口设计、然后类实现接口。
//驾驶汽车的接口,里面有一个驾驶汽车的方法,
public interface Car {
void driver();//省去了public abstract
}
//具体类实现接口,并覆写方法
public class Benz implements Car{
@Override
public void driver() {
System.out.println("驾驶奥迪");
}
}
(06)创建对象的语法格式
类名 变量 = new 当前类的构造方法
父类 变量 = new 子类的构造方法
接口 变量 = new 实现类的构造方法
public static void main(String[] args) {
Car car = new Benz();
car.driver();
}
(07)具体类、抽象类、接口的实现
具体类 | 抽象类 | 接口 | |
---|---|---|---|
成员变量 | 都可以 | 都可以 | public static final |
成员方法 | 全部实现 | 部分实现 | public abstract |
构造方法 | 有 | 有 | 没有 |
创建对象 | 能 | 不能 | 不能 |
意图目的 | 实现 | 设计(继承) | 设计 |
应用场景 | 可以实现全部方法 | 既需要一部分设计也需要一部分方法的实现 | 纯设计,不需要任何方法的实现 |
(08)方法分类总结
第一种:没有返回值的方法、有返回值的方法
第二种:静态方法(属于类)、非静态方法(属于对象)
第三种:实现方法、抽象方法(没实现的方法)
(09)final关键字
①final修饰变量:表示常量、不能更改。
②final修饰方法:子类的方法不能覆盖父类的方法。
父类java03定义了一个final方法:
public class java03 {
public final void add(){
}
}
如下:父类方法加了final关键字修饰,子类写了相同的方法就会报错
③final修饰类:不能被继承。
(10)this关键字
this:表示当前类的对象、表示new创建出来的对象。
示例:在student类中有参的构造方法
//在student类中有参的构造方法
public Student(String name, Integer age, String school) {
this.name = name;
this.age = age;
this.school = school;
}
//在测试类中通过有参的构造方法创建了一个对象student
//此时,构造方法中的this就代表student
//this.name = name就相当于 student.name = 刘亦菲
//如果不加this,变成 name = name,程序无法区分谁是成员变量,谁是局部变量
public static void main(String[] args) {
Student student = new Student("刘亦菲",20,"清华");
}
作用一:区别成员变量和局部变量。
作用二:用于构造方法之间的调用。
public Student() {
this("刘萌萌",20,"清华");//在无参构造方法里调用有参的构造方法
}
public Student(String name, Integer age, String school) {
this.name = name;
this.age = age;
this.school = school;
}
(11)super关键字
super:表示父类的引用。
作用:用于调用父类的构造方法。
注意:如果类中不写构造方法、java会默认提供一个public无参的构造方法。(意思是一个构造方法都不写,系统会提供一个,如果写了就不在提供)
注意:子类的构造方法的首句会默认调用super()父类无参构造方法。
注意:Java中所有类都是从**Object**顶级父类继承下来的。
注意:如果类没有父类、java会默认让它继承Object类。
(12)类(具体类和抽象类)和接口之间的关系
类与类之间是继承关系
接口与接口之间是继承关系
类与接口之间是实现关系
注意:类只能继承一个父类、接口可以继承多个父接口。
(13)具体类、抽象类、接口同时使用的代码模板
class A extends B implements C, D, E, F
第一步:接口 设计
第二步:抽象类 部分实现
第三步:具体类 全部实现
(14)包的使用
定义包:package 包名(com)
导入包:import 包名.类名(com.Person)
导包的场景:如果需要的类在外包则必须导入才能使用。