Day14 抽象类和接口

---------------------模拟实现“愤怒的小鸟”的游戏-------------------

关键步骤:

1、定义鸟的抽象类

2、将各种鸟中统一的行为定义为抽象类的普通方法

3、将各种鸟不同的行为定义为抽象类中的抽象方法

4、实现具体的鸟类,重写抽象方法,实现各种鸟的不同行为

5、将鸟叫的行为定义为接口

6、继承接口实现各种具体的鸟叫

7、将叫的行为作为抽象鸟类的一个属性

8.1.1抽象类和抽象方法

1、普通方法和抽象方法的区别

1、当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现,而是在抽象类的子类通过方法重写进行实现,如果子类也不能实现父类的抽象方法,子类也必须被定义为抽象类。

2、没有抽象构造方法,也没有抽象静态方法。

3、抽象类可以有非抽象构造方法,创建子类的实例时可能调用。

2、普通类和抽象类的区别

抽象类可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类,即普通类不能定义抽象方法。

3、定义一个抽象类

当一个类被定义为抽象类,它可以包含各种类型的成员,包括属性、方法等,其中方法又可以分为普通方法和抽象方法。

8.1.5初识接口

2、定义和实现一个简单接口

接口的定义语句:

public interface JieKou{
    //接口成员
}

接口实现语句:

public Master implements Jiekou{
    //实现方法
    //普通方法
}

1、接口的关键字是interface,实现接口的关键字是implement是,接口之间可以用extends是继承。

2、接口不能被实例化,也没有构造方法,因为里面的方法全部都是公共抽象方法。

3、接口可以有静态方法,但规范不建议。

4、接口中的变量全部是公共静态常量,一般在工作中一个接口可以全是常量,没有方法

5、接口用于扩展功能,多个接口可以被一个接口继承,多个接口可以被一个类实现。

接口中所有的方法默认为public abstract方法

3、复杂的接口

1、实现类可以实现多个接口,多个接口之间用逗号隔开

2、也可以将多个接口集成为一个接口,这个集成接口里面可以什么都不用写

public interface Intelligent extends Web ,Play,Photo{
    //可以为空
}

抽象类和接口的异同点:

相同点:

1、都代表抽象层,都不能被实例化,都可以包含抽象方法,都可以实现多态

不同点:

1、接口不能有构造方法,接口不建议用静态方法。

2、抽象类中可以有普通方法,抽象方法也可以不是公共的。

3、抽象类的目的是代码重用(被继承),接口的目的是功能扩展(被实现)。

4、一个类只可以继承一个父类,但可以实现多个接口。

5、抽象类便于复用,接口便于代码维护。

8.1.7面向对象的设计原则

1、摘取代码中的变化行为,形成接口

2、多用组合,少用继承

3、针对接口编程,不依赖具体实现

4、针对扩展开放,针对改变关闭

-------------------接口实现智能手机功能----------------

【需求分析】
1、做个智能手机,可以实现播放,照相,连接网络的功能
2、需要建4个类,抽象手机类,智能手机为实现类,3个接口类,1个大接口类,测试类
3、抽象手机类(父类)手机有牌子和型号,可以打电话,发短信,显示信息的抽象方法方法。
4、接口类1为播放器,抽象方法是播放,可以被实现类实现.
4-1、接口类2为照相,抽象方法时照相,需要被实现类实现
4-2、接口类3为连接网络,抽象方法为上网,需要被方法类实现
5、将三个接口可以集成为一个大的抽象类叫智能类(播放,照相,上网),用继承的关系
6、用实现类实现这个大的智能类,在测试类中创建人这个对象和手机对象,调用人和手机的各种属性和方法。

代码:

public abstract class Phone {
    static String brand="苹果手机";
    static String type="Iphone13";
    public abstract void call();
    public abstract void sendInfo();
    public abstract void showTime();
}


public interface Photo {
    void photo();
}


public interface Web {
    void surf();
}


public interface Play {
    void play();
}


public interface Intelligent extends Web ,Play,Photo{
    //可以为空
}


public class Iphone extends Phone implements Intelligent {

    @Override
    public void photo() {
        System.out.println("拍照");
    }

    @Override
    public void play() {
        System.out.println("播放音乐");
    }

    @Override
    public void surf() {
        System.out.println("上网冲浪");
    }

    @Override
    public void call() {
        System.out.println("打电话给父母");
    }

    @Override
    public void sendInfo() {
        System.out.println("发送信息给朋友");
    }

    @Override
    public void showTime() {
        System.out.println("显示手机当前时间");
    }
}


public class Text  {
    public static void main(String[] args) {
        Iphone abc=new Iphone();
        abc.call();
        abc.photo();
        abc.play();
        abc.sendInfo();
        abc.showTime();
        abc.surf();
    }
}

Guess you like

Origin blog.csdn.net/yuanlaishidahuaa/article/details/121135317