抽象的作用是如果子类都会重写(不一样)的方法,定义为抽象方法,节省代码量。
抽象类里面也可以有非抽象的方法,所有子类的代码都一样的方法就在父类中定义,代码重用。
abstract可用于修饰类和方法
抽象方法或类的特性-
abstract用于修饰方法,该方法是抽象方法:如果用于修饰类,该类就是抽象类
-
一个类如果有抽象的方法,类也必须定义为抽象类
-
抽象类不能直接被实例化,抽象方法继承时得实例化
-
如果继承抽象类,必须要重新(实现implements)父类中的所有抽象方法;否则这个子类也只能定义成抽象类
-
抽象类里可以有非抽象的方法
-
抽象类可以有构造方法,子类实例化的时候会调用父类的构造方法
-
构造方法不能用abstract来修饰
-
静态方法不能用abstract来修饰
动物的抽象方法,有一个抽象方法short()
public abstract class Animal {//抽象类
public Animal(){//构造方法不能用abstract来修饰
System.out.println("Animal的构造方法");
}
public abstract void shout();
public void breathe(){//非抽象的方法
System.out.println("动物在呼吸");
}
}
动物的子类Cat,重写父类的抽象方法
public class Cat extends Animal{
@Override
public void shout() {
System.out.println("喵喵");
}
}
接口interface
接口中的方法都是未实现的方法,可以理解为全是抽象方法。
接口一般定义规范(方法名,参数,返回类型),它的实现类必须按接口的方法定义去实现方法
接口还用于框架或设计模式中,便于扩展,利用多态的特性,便于程序的扩展
接扣可以实现多接口,弥补类只能单继承的缺点
接口可以多继承(接口)
-
定义接口的语法:
【修饰符】 interface 接口名字 extends 接口1,接口2{
}
-
接口实现的语法:
【修饰符】【abstract 可不写】class 类名 implements 接口名(可以多个接口“,”隔开){
}
接口的实现类可以是抽象类,是抽象类就不要求实现每一个方法;是具体类就必须实现所有方法
Usb interface
public interface Usb {
//不写修饰符默认public
public void init();//初始化usb接口
public void send();//发送数据
public void reject();//弹出usb设备
}
实现类Usb2
public class Usb2 implements Usb{
@Override
public void init() {
System.out.println("USB2.0 初始化");
}
@Override
public void send() {
System.out.println("USB2.0 传输数据");
}
@Override
public void reject() {
System.out.println("USB2.0 弹出设备");
}
}
实现类Usb3
public class Usb3 implements Usb{
@Override
public void init() {
System.out.println("USB3.0 初始化");
}
@Override
public void send() {
System.out.println("USB3.0 传输数据");
}
@Override
public void reject() {
System.out.println("USB3.0 弹出设备");
}
}
接口特点
-
接口定义的关键字是interface,接口实现的关键字是implements
-
接口中的所有方法都只定义,不实现
-
接口的方法不写访问修饰符,默认是public
-
接口的属性默认是public static final的,相当于是常量
-
接口不能被实例化
-
接口没有构造方法
public interface Usb {
//接口里面的属性默认是public static final,接口中的属性就是常量
//等效于public static final String name = “usb01”;
String name = "sub01";



