抽象
Java中用abstract关键字修饰的就是抽象的,具体可以用来外部类和方法
抽象方法
一个方法没有方法体那么这个方法就是抽象方法,需要用abstract关键字修饰.
格式: 修饰符 abstract 返回值类型 方法名(形参列表)
注: 抽象方法没有方法体,所以不能定义抽象方法是不可以加{}
抽象类
如果一个类中存在抽象方法,那么这个类就是抽象类
格式: public abstract class 类名{}
抽象类的使用
抽象类不能直接创建对象,必须通过子类来创建对象,如果该类的子类想创建对象,那么必须重写该类中定义的抽象方法,否则子类依旧是抽象方法
注:
1.abstract不能和static一起修饰方法 因为静态是可以直接被被类调用的,抽象方法不能被直接调用
2.abstract不能和private一起使用,因为抽象需要继承后重写才能使用,private修饰的方法不能被继承
3.abstract不能和final一起使用,因为final修饰的方法不能被重写
抽象类举例
//定义一个员工的抽象类
abstract class Employee{
String name;
int age;
char sex;
//员工都有工作,定义为抽象
public abstract void work();
}
//定义一个程序员员工类,继承员工类
class Programmer extends Employee{
//这里必须重写员工类的抽象方法,否者就需要将本类也定义为抽象类
public void work(){
System.out.println("敲代码");
}
}
//定义一个Hr员工类
class Hr extends Employee{
public void work(){
System.out.println("人事管理");
}
}
//测试类
public class test {
public static void main(String[] args) {
//通过子类来实例化一个抽象类对象
Employee e=new Programmer();
//多态的应用,这里调用的就是程序员类的方法
e.work();
//同理想要调用Hr类的方法只要通过多态就可以完成,如果想要调用子类中独有的方法,那么只能通过子类类型对象去调用
}
}
接口
关键字 interface
定义: 全部都是抽象方法的特殊类
一般用来定义规则和标准
使用格式:
public interface 接口名{
抽象方法和常量
//jdk1.8中可以有其它方法
}
接口的使用:
关键字: implements
格式: 类 implements 接口1,接口2.....
注:
1.类是单继承的,接口是可以多继承,多实现的
2.接口和抽象类一样也不可以实例化对象
3.接口的实现类必须重写接口的所有抽象方法,否者该类只能是抽象类
类,抽象类,接口之间的区别
类 class
有属性,方法,代码块,内部类
可以创建和实例化对象
可以继承其它类,实现接口
抽象类 abstract class
普通类中可以有的抽象类中都可以有,还可以有抽象方法(抽象类中不一定有抽象方法,但是有抽象方法的类必定是抽象类)
不能实例化对象,只能通过子类来实例化,子类必须重写所有抽象方法
可以继承其他类,实现接口
接口 interface
只能有常量和抽象方法
不能实例化对象,只能通过子类来实例化,子类必须重写所有抽象方法
可以继承多个接口,不能实现接口
访问修饰符
能否访问 | 本类 | 本包 | 子类 | 任何 |
---|
private | 可以 | | | |
默认 | 可以 | 可以 | | |
protected | 可以 | 可以 | 可以 | |
public | 可以 | 可以 | 可以 | 可以 |