抽象类
//父类 动物类
public abstract class Animal {
//成员变量:值可以改变
String name = "小黄";
//成员常量:值不能改变
final int age = 10;
public abstract void eat();
}
//子类 Dog类
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("吃骨头");
}
}
//子类 Pig类
public class Pig extends Animal {
@Override
public void eat() {
System.out.println("吃面条");
}
}
// 调用类
public class Test {
public static void main(String[] args) {
Animal d = new Dog();
Animal p = new Pig();
d.eat();
p.eat();
}
}
一、抽象类的概念
包含抽象方法的类。用abstract修饰
二、抽象方法的概念
只有方法声明,没有方法体的方法。用abstract修饰抽
三、象方法的由来
当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类
四、抽象类的特点
1. 修饰符:必须用abstract关键字修饰
修饰符 abstract class 类名 {}
public abstract class Animal {}
修饰符 abstract 返回类型方法名 {}
public abstract String getName {}
2. 抽象类不能被实例化,只能创建子类对象
3. 抽象类子类的两个选择
重写父类所有抽象方法
定义成抽象类抽象类
五、成员的特点
成员变量:可以有普通的成员变量也可以有成员常量(final)
成员方法:可以有普通方法,也可以有抽象方法抽象类不一定有抽象方法,有抽象方法的类一定是抽象类(或接口)
构造方法:像普通类一样有构造方法,且可以重载
接口
接口的概念
接口技术用于描述类具有什么功能,但并不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则、标准
接口的定义
定义接口使用关键字interface
interface 接口名 {}
类和接口是实现关系,用implements表示
class类名implements接口名
接口创建对象的特点
1. 接口不能实例化通过多态的方式实例化子类对象
2. 接口的子类(实现类)可以是抽象类,也可以是普通类
接口继承关系的特点
1. 接口与接口之间的关系
继承关系,可以多继承,格式
接口extends接口1,接口2,接口3...
2. 继承和实现的区别
继承体现的是“is a”的关系,父类中定义共性内容
实现体现的是“like a”的关系,接口中定义扩展功能
接口成员的特点
接口成员变量的特点
接口没有成员变量,只有公有的、静态的常量:public static final 常量名 = 常量值
接口成员方法的特点
JDK7及以前,公有的、抽象方法:
public abstract 返回值类型 方法名();
JDK8以后,可以有默认方法和静态方法:
public default 返回值类型 方法名() {}
static 返回值类型 方法名() {}
JDK9以后,可以有私有方法:
private 返回值类型 方法名() {}
接口构造方法的特点
接口不能够实例化,也没有需要初始化的成员,所以接口没有构造方法
final关键字
final的作用:
用于修饰类、方法和变量
修饰类:该类不能被继承,但是可以继承其他的类
修饰方法:该方法不能被重写不能与abstract共存,不能被重写
修饰变量:是一个常量,值只能设置一次
static关键字
static的作用
用于修饰类的成员:成员变量:类变量成员方法:类方法
调用方式
类名. 成员变量名; 类名. 成员方法名(参数);
static修饰成员变量特点:被本类所有对象共享
注意事项
随意修改静态变量的值是有风险的,为了降低风险,可以同时用final关键字修饰,即公有静态常量(注意命名的变化)
public final static String DEPART_NAME = "研发部";
static修饰成员方法
静态方法:静态方法中没有对象this,所以不能访问非静态成员
静态方法的使用场景只需要访问静态成员不需要访问对象状态,所需参数都由参数列表显示提供