09.01面向对象(多态的概述及其代码体现)
-
多态(polymorphic)概述
事物存在的多种形态
-
多态前提
a.要有继承关系
b.要有方法重写
c.要有父类引用指向子类对象
-
案例演示
代码体现实例
09.02面向对象(多态中成员的访问特点)
A.多态中成员的访问特点
a.成员变量
编译看左边,运行看左边
b.成员方法
编译看左边,运行看右边
c.静态方法
编译看左边,运行看左边
(与静态相关算不上重写,所以访问还是左边的)
只有非静态的成员方法编译看左边,运行看右边
### 09.03面向对象(超人的故事)
帮助理解多态
09.04面向对象(多态中向上转型和向下转型)
案例演示
Person p=new Superman();向上转型
Superman sm=(Superman)p;向下转型
09.05面向对象(多态的好处和弊端)
A.多态的好处
a.提高的代码的维护性(继承保证)
b.提高的代码的拓展性(多态保证)
B.多态的弊端
不能使用子类特有的行为和属性
09.06面向对象(多态中的题目分析)
A.看下面程序是否有问题,说出结果
class Fu{
public void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
public void show(){
System.out.println("zi show");
}
public void method (){
System.out.println("zi method");
}
}
class Test_Demo{
public static void main(String []args){
Fu f=new Zi();
f.method();
f.show();
}
}
B.看下面程序是否有问题,说出结果
class A{
public void show(){
show2();
}
public void show2(){
System.out.println("我");
}
}
class B extends A{
public void show(){
show2();
}
public void show2(){
System.out.println("爱");
}
}
class C extends B{
public void show(){
super.show();
}
public void show2(){
System.out.println("你");
}
}
class test(){
public static void main(String []args){
A a=new B();
a.show();
B b=new C();
b.show();
}
}
09.07面向对象(抽象类的概述及其特点)
A.抽象类的概述
抽象就是看不懂的
B.抽象类的特点
a.抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名{}
public abstract void eat();
b.抽象类不一定有抽象方法,但抽象方法一定在抽象类或者接口中;
c.抽象类不能实例化,抽象类如何实例化?
按照多态的方式,由具体得到子类实例化(多态的一种,抽象类的多态)
d.抽象类的子类
要么是抽象类
要么重写抽象类中所有的抽象方法
09.08面向对象(抽象类的成员特点)
A.抽象类的成员特点
a.成员变量:既可以是变量,也可以是常量,abstract不能修饰成员变量
b.有构造方法(用于子类访问父类数据的初始化)
c.成员方法:既可以是抽象的,也可以是普通方法
B.抽象类的成员方法特性
a.抽象方法:强制子类要做的事
b.非抽象方法:子类继承的事情,提高代码的复用性
09.09面向对象(抽象类中的面试题)
A.一个抽象类没有抽象方法,可以定义为抽象类吗?如果可以,有什么意义?
可以,这样做的目的是不让其他类创建本类的对象,交给子类来创建
B.abstract不能与哪些关键字共存?
09.10面向对象(接口的概述及其特点)
A.接口的概述:
从狭义来讲就是由interface关键字修饰的类
从广义来讲对外提供规制的都是接口
B,接口的特点
a.接口用关键字interface表示
interface 接口名{}
b.类实现接口用implements表示
class 类名 implements 接口名{}
c.接口不能实例化
d.接口的子类
a.可以是抽象类,但是意义不大
b.可以是具体类要重写接口中的抽象方法(推荐)
09.11面向对象(接口的成员特点)
A.接口成员特点
成员变量:只能是常量,并且是静态的和公共的
默认修饰符:public static final
构造方法:接口没有构造方法
成员方法:只能是抽象方法
默认修饰符:public abstract
09.12面向对象(类与类,类与接口,接口与接口的关系)
a.类与类
继承关系,只能单继承,可以多层继承
b.类与接口
实现关系,可以单实现,也可以多实现
并且可以在继承一个类的同时多实现
c.接口与接口的关系
继承关系,可以单继承也可以多继承
09.13面向对象(抽象类与接口的区别)
A.成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只能是常量
成员方法:只能抽象
B.关系区别
类与类:
继承,单继承
类与接口:
实现,单实现,多实现
接口与接口:
继承,单继承,多继承
C.设计理念区别:
抽象类:被继承体现的是" is a"的关系,抽象类中定义的是继承体系共性的东西
接口:与被实现者是" like a "的关系,接口中定义的是该继承体系中拓展的功能.