1:多态是什么,前提是什么?
一个事物在不同情况下的状态
首先必须要有继承
必须要对父类的方法进行重写
必须要有父类引用指向子对象
2:多态中成员访问的特点?
成员变量
编译看左边(父类),运行看左边(父类)。
成员方法
编译看左边(父类),运行看右边(子类)。
静态方法
编译看左边(父类),运行看左边(父类)。
只有非静态的成员方法,编译看左边,运行看右边
3:多态的好处及弊端?
多态的好处
提高了代码的维护性(继承保证)
提高了代码的扩展性(由多态保证)
可以当作形式参数,可以接收任意子类对象
多态的弊端
不能使用子类的特有属性和行为。
4:什么是向上转型?什么是向下转型?
向上或者向下转型 就要说到继承
比如有2个类 A B
B继承A
先 B b = new B();
这个时候 A a = b; 这种用法就是向上转型 使用父类的引用 引用子类对象 向上转型是自动的不需要其他操作
然后在上边的基础上 b = (B)a 这个就是向下转型 当用父类引用 引用子类对象 现在想不使用父类的引用 而使用子类的引用 就是向下转型 向下转型必须强制转型 必须确定对象确实是子类对象 如果是父类对象那就会报错
6:抽象类概述及其特点?
抽象类概述
抽象就是看不懂的
抽象类特点
抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名 {}
public abstract void eat();
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
抽象类不能实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
abstract不能和哪些关键字共存
static:
abstract
class A {
public abtract
static void method();
}
static修饰后可以直接类名调用方法,但是抽象方法没有实现体,调用无意义;
final:
final修饰的类不能被继承,修饰的方法不能被重写,修饰的成员变量只能为常量;但是继承的子类要重写这个抽象方法,所以会出现矛盾;
private:
抽象方法是为了让子类重写并给定实现体,但是private修饰的方法只能本类访问,所以矛盾。
10:接口的概述及其特点?
接口概述
从狭义的角度讲就是指java中的interface
从广义的角度讲对外提供规则的都是接口
接口特点
接口用关键字interface表示
interface 接口名 {}
类实现接口用implements表示
class 类名 implements 接口名 {}
接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
接口的子类
可以是抽象类。但是意义不大。
可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
13:抽象类和接口的区别?
成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。