day09 多态抽象类接口

1:final关键字可以干什么?有什么特点?

修饰类、方法、属性和变量

  • final 修饰类,则该类不允许被继承,为最终类
  • final 修饰方法,则该方法不允许被覆盖(重写)
  • final 修饰属性:则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
  • final 修饰变量,则该变量的值只能赋一次值,即常量

2:final关键字的面试题?

A:修饰局部变量
B:初始化时机

a:基本类型 值不能发生改变
b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的

a:只能初始化一次
b:常见的给值
定义的时候(推荐)
构造方法中

3:多态是什么,前提是什么?

  • 允许不同类的对象对同一消息做出响应
  • 同一个对象在不同时刻体现出来的不同状态

A:有继承或者实现关系
B:有方法重写
C:有父类或者父接口引用指向子类对象 (向上转型)

4:多态中成员访问的特点?

成员变量
成员方法
静态方法

A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
为什么?
因为成员方法有重写

5:多态的好处及弊端?如何解决多态的弊端?

多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
多态的弊端:
父不能使用子的特有功能
现象:子可以当作父使用,父不能当作子使用

6:什么是向上转型?什么是向下转型?

A:向上转型
从子到父
B:向下转型
从父到子

强转符 ()
Man m = (Man)p;

可能ClassCastException异常

使用instanceof在进行向下转型前判断
if(p instnceof Man) {
    Man m = (Man)p;
}

7:多态练习

class Animal {
    //父类方法
    public void bark() {
        System.out.println("动物叫!");
    }
}
class Dog extends Animal {

    //子类重写父类的bark方法
    public void bark() {
        System.out.println("汪、汪、汪!");
    }
    //子类自己的方法
    public void dogType() {
        System.out.println("这是什么品种的狗?");
    }
}
public class Test {

    public static void main(String[] args) {
        Animal a = new Animal();
        Animal b = new Dog();
        Dog d = new Dog();

        a.bark();
        b.bark();
        //b.dogType();
        //b.dogType()编译不通过
        d.bark();
        d.dogType();
    }

}	

8:抽象类概述及其特点?

在定义类时,前面加上 abstract 关键字修饰的类叫抽象类
抽象就是看不懂的

A:抽象类和抽象方法必须用关键字abstract修饰
B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
C:抽象类不能实例化
D:抽象类的子类
a:是一个抽象类
b:是一个具体类这个类必须重写抽象类中的所有抽象方法

9:抽象类成员特点?

A:成员变量
有变量,有常量
B:构造方法
有构造方法
C:成员方法
有抽象,有非抽象

10:抽象类练习?

// 抽象方法
public abstract class TelePhone {
    public abstract void call();  //抽象方法,打电话
    public abstract void message(); //抽象方法,发短信
}
// 构建子类,并实现抽象方法
public class CellPhone extends TelePhone {

    @Override
    public void call() {
        System.out.println("我可以打电话!");
    }

    @Override
    public void message() {
        System.out.println("我可以发短信!");
    }

    public static void main(String[] args) {
        CellPhone cp = new CellPhone();
        cp.call();
        cp.message();
    }

}

11:抽象类的小问题

A:一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
B:[abstract不能和哪些关键字共存](https://blog.csdn.net/qq_29842929/article/details/53536807)

可以 不让创建对象

a:final 冲突
b:private 冲突
c:static 无意义

12:接口的概述及其特点?

接口用于描述类所具有的功能,而不提供功能的实现,
功能的实现需要写在实现接口的类中,并且该类必须实现接口中所有的未实现方法

A:接口用关键字interface修饰
interface 接口名 {}
B:类实现接口用implements修饰
class 类名 implements 接口名 {}
C:接口不能实例化
D:接口的实现类
a:是一个抽象类
b:是一个具体类,这个类必须重写接口中的所有抽象方法

13:接口的成员特点?

A:成员变量
只能是常量
默认修饰符:public static final
B:构造方法
没有构造方法
C:成员方法
只能是抽象的
默认修饰符:public abstract

14:接口的练习

// Cat.java
public class Cat implements Animal{

     public void eat(){
         System.out.println("Cat eats");
     }

     public void travel(){
         System.out.println("Cat travels");
     }
     public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();
        cat.travel();
    }
}

15:抽象类和接口的区别?

区别
A:成员区别
抽象类:
接口:
B:关系区别:
类与类:
类与接口:
接口与接口:
C:设计理念不同
抽象类:is a,抽象类中定义的是共性功能
接口:like a,接口中定义的是扩展功能

相同:
都不能创建对象
都可以定义抽象方法,并且一定要在子类中重写
不同:
关键字不同abstract interface
抽象方法中既可以有抽象的方法也可以有普通的方法
接口中中所有的方法都是抽象方法
抽象类的方法可以任意权限,接口中方法只能是public
抽象类只能单继承,接口可以多实现

16:案例

[猫狗案例,加入跳高的额外功能](https://blog.csdn.net/dai_ma_dong/article/details/95896248)
[老师和学生案例,加入抽烟的额外功能](https://blog.csdn.net/qq_23973805/article/details/79121017)
[教练和运动员案例(学生分析然后讲解)](https://blog.csdn.net/lcn_Lynn/article/details/74989842)

猜你喜欢

转载自blog.csdn.net/hezuijiudexiaobai/article/details/107578987
今日推荐