抽象类
- 什么是抽象类
只定义了类的抽象行为,没有具体实现相应的行为。 - 语法格式
- 注意
1.抽象类不能创建对象;
2.抽象类中的抽象方法可有可无;
3.普通的子类 必须 重写实现抽象父类中的所有抽象方法;(抽象子类除外);
4.构造不能是抽象的;
5.抽象不能private ,static,final一起使用。 - 代码实现
//抽象类
abstract class TrafficTool{
private int count;
public TrafficTool() {
}
public TrafficTool(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public abstract void run() ;//抽象方法
}
class Car1 extends TrafficTool{
public Car1(int count) {
super(count);
}
public void run() {
System.out.println("汽车在 公路上行驶,载客量:" + getCount() );
}
}
class Tube extends TrafficTool{
public void run() {
System.out.println("地铁在隧道里行驶");
}
}
public class TestTrafficTool {
public static void main(String[] args) {
// TrafficTool tool = new TrafficTool() ;//不能创建对象
Car1 car = new Car1(20);
car.run();
// Tube tube = new Tube();
// tube.run();
接口
-
什么是接口
接口:一组规则的封装。
-
注意
1)成员都是 public的;
2)常量 :public static final
3) 抽象方法:public abstract的
4)默认方法: public default -
接口的特点
1)不能创建对象;
2)使用通过 实现类 来使用的;
3)实现类 实现接口 ,必须 实现所有的抽象方法;(抽象的实现类除外);
4)实现类可以实现 多个接口的功能;
5)接口之间可以继承,可以多继承。 -
代码实现
示例1:
//三项电
interface ThreeElectric{
void threeService();//抽象方法
}
//两项电
interface TwoElectric{
void twoService();
}
//插排
interface Socket extends ThreeElectric,TwoElectric{
void socketService();//插排供电
}
class Goods{
//商品
}
class Computer extends Goods implements Socket{
@Override
public void twoService() {
System.out.println("计算机的外部设备两项电通电");
}
@Override
public void threeService() {
System.out.println("计算机本身三项电通电");
}
@Override
public void socketService() {
System.out.println("计算机连接插排供电");
}
}
/*class Computer implements ThreeElectric,TwoElectric{
@Override
public void twoService() {
System.out.println("计算机的外部设备两项电通电");
}
@Override
public void threeService() {
System.out.println("计算机本身三项电通电");
}
}*/
public class TestElectric {
public static void main(String[] args) {
Computer computer = new Computer();
computer.threeService();
computer.twoService();
// IceBox box = new IceBox();
// box.threeService();
}
}
class IceBox implements ThreeElectric{
@Override
public void threeService() {
System.out.println("冰箱三项电通电");
}
}
示例2
interface IA{
int N = 11;//常量 static final
static void sf() {System.out.println("ia_sf");}
default void df() {System.out.println("ia_df");}
void af();
}
interface IB{
int N = 22;//常量
static void sf() {System.out.println("ib_sf");}
default void df() {System.out.println("ib_df");}
void af();
}
class DemoIAIB implements IA,IB{
/*//匿名内部类分别是实现的
IA ia = new IA() {
@Override
public void af() {
System.out.println("ia_af");
}
};
IB ib = new IB() {
@Override
public void af() {
System.out.println("ib_af");
}
};
*/
@Override
public void af() {
System.out.println("af");
}
public void show() {
System.out.println(IA.N);
System.out.println(IB.N);
IA.sf();
IB.sf();
// df();
}
@Override
public void df() {
IA.super.df();
IB.super.df();
System.out.println("hello");
}
}
接口和抽象类异同
抽象类:只定义了类的抽象行为,没有具体实现相应的行为。
接口:一组规则的封装。
相同点:都不能创建对象;
注意:
1.抽象类不能创建对象;
2.抽象类中的抽象方法可有可无;
3.普通的子类 必须 重写实现抽象父类中的所有抽象方法;(抽象子类除外);
4.构造不能是抽象的;
5.抽象不能private ,static,final一起使用
2.接口特点:
1)不能创建对象;
2)使用通过 实现类 来使用的;
3) 实现类 实现接口 ,必须 实现所有的抽象方法;(抽象的实现类除外);
4)实现类可以实现 多个接口的功能;
5)接口之间可以继承,可以多继承。