接口&多态

# 基础题目

## 第一题:概念辨析

1. 什么是接口,如何定义接口?
   * 接口,是Java语言中一种引用类型,是方法的集合。
   * 使用interface关键定义接口,其中可以定义抽象方法,默认方法,私有方法,静态方法等方法。
2. 什么叫做多态,条件是什么?
   * 一类事物的行为,具有多种表现形式。
   * 条件:
     * 继承或者实现【二选一】
     * 方法的重写。
     * 父类引用指向子类对象。
3. 使用多态特性,带来了什么样的好处?
   * 增强方法的扩展性和复用性。
4. 使用多态特性,注意什么样的弊端?
   * 由于类型的提升,导致调用子类对象特有的方法,必须向下转型。

## 第二题:语法练习

* 语法点:接口

* 按步骤编写代码,效果如图所示:

  ![](img\1.jpg)

* 编写步骤:

  1. 定义接口A,普通类B实现接口A
  2. A接口中,定义抽象方法showA。 
  3. A接口中,定义默认方法showB。
  4. B类中,重写showA方法
  5. 测试类中,创建B类对象,调用showA方法,showB方法。

* 参考答案.:


```java
    
    public class Test2 {
        public static void main(String[] args) {
            B b = new B();
            b.showA();
            b.showB();
        }
    }
    
    interface A{
        public abstract void showA();
        public default void showB(){
            System.out.println("BBBB");
        }
    }
    
    class B implements A {
        @Override
        public void showA() {
            System.out.println("AAAA");
        }
    }
```

## 第三题:语法练习

* 语法点:接口

* 按步骤编写代码,效果如图所示:

  ![](img\2.jpg)

* 编写步骤:

  1. 定义接口A,普通类B实现接口A。
  2. A接口中,定义抽象方法showA。 
  3. A接口中,定义私有方法show10(String str),循环打印10次str。
  4. A接口中,定义默认方法showB10,showC10,分别调用show10方法,传入参数。
  5. 测试类中,创建B对象,调用showA方法,showB10方法,showC10方法

* 参考答案.:


```java
    
    public class Test3 {
        public static void main(String[] args) {
            BB b = new BB();
            b.showA();
            b.show10B();
            b.show10C();
        }
    }
    
    interface AA{
        public abstract void showA();
        public default void show10B(){
           show10("BBBB");
        }
    
        public default void show10C(){
            show10("CCCC");
        }
    
        private  void show10(String str){
            for (int i = 0; i < 10; i++) {
                System.out.print(str+" ");
            }
            System.out.println();
        }
    }
    
    class BB implements AA {
        @Override
        public void showA() {
            System.out.println("AAAA");
        }
    
    }
```


## 第四题:语法练习

* 语法点:接口,静态

* 按步骤编写代码,效果如图所示:

  ![](img\4.jpg)

* 编写步骤

1. 定义接口A,普通类B实现接口A。
2. A接口中,定义抽象方法showA。 
3. A接口中,定义私有静态方法show10(String str),循环打印10次str。
4. A接口中,定义静态方法showB10,showC10,分别调用show10方法,传入参数。
5. B类中,定义静态方法showD
6. 测试类中,使用A接口,调用静态showB10方法,showC10方法,
7. 测试类中,使用B类,调用showA方法,showD方法。
* 参考答案.:


```java
    
    public class Test4 {
        public static void main(String[] args) {
           AAA.showB();
           AAA.showC();
            BBB bbb = new BBB();
            bbb.showA();
            BBB.showD();
        }
    }
    
    interface AAA {
        public abstract void showA();
        public static void showB(){
            System.out.println("static BBBB");
    
            show10("BBBB");
        }
    
        public static void showC(){
            System.out.println("static CCCC");
    
            show10("CCCC");
        }
    
        private static void show10(String str) {
            for (int i = 0; i < 10; i++) {
                System.out.print( str+" ");
            }
            System.out.println();
        }
    }
    
    class BBB implements AAA {
        @Override
        public void showA() {
            System.out.println("AAA");
        }
    
        public static void showD(){
            System.out.println("DDDD");
        }
    }
```


## 第五题:语法练习

* 语法点:接口,多态

* 按步骤编写代码,效果如图所示:

  ![](img\5.jpg)

* 编写步骤

  1. 定义接口Universe,提供抽象方法doAnything。
  2. 定义普通类Star,提供成员发光shine方法
  3. 定义普通类Sun,继承Star类,实现Universe接口
  4. 测试类中,创建Star对象,调用shine方法
  5. 测试类中,多态的方式创建Sun对象,调用doAnything方法,向下转型,调用shine方法。

* 参考答案.:
```java
        
        public class Test5 {
            public static void main(String[] args) {
                Star s  = new Star();
                s.shine();
        
                System.out.println("====================");
        
                Universe universe = new Sun();
        
                universe.doAnything();
                Sun sun  = (Sun) universe;
                sun.shine();
            }
        }
        
        interface  Universe{
            public abstract void doAnything();
        }
        
        class Star {
            public void shine(){
                System.out.println("star:星星一闪一闪亮晶晶");
            }
        }
        class  Sun extends Star implements Universe{
            @Override
            public void doAnything() {
                System.out.println("sun:太阳吸引着9大行星旋转");
            }
            @Override
            public void shine() {
                System.out.println("sun:光照八分钟,到达地球");
            }
        }
```


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值