抽象类,接口与内部类

抽象类:
(1)多个具体的事物具备相同的方法声明,而方法体不同,我们就只抽取方法声明,然后定义到一个类中。
  而一个没有方法体的方法是一个抽象方法,一个类中有抽象方法,该类必须定义为抽象类。
(2)抽象类的特点:
A:抽象类或者抽象方法用abstract修饰。
B:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
C:抽象类不能被实例化。
D:子类继承抽象类,要么是抽象类,要么重写所有父类抽象方法。
(3)抽象类的几个小问题
A:不能被实例化,要构造方法干啥?
B:一个类中没有抽象方法,居然定义抽象类,有什么意义?
C:抽象关键字不能和哪些关键字共存
a:private
b:final
c:static
(4)抽象类的成员:
A:成员变量 有变量,也有常量
B:构造方法 有构造方法,用于子类访问父类数据的初始化
C:成员方法 有抽象方法,也有非抽象的方法

(5)抽象类的案例

成员变量和局部变量的区别
(1)定义位置区别:
成员变量:定义在类中,方法外。
局部变量:定义在方法中,或者方法声明上。
(2)初始化值的区别:
成员变量:都有默认初始化值。
局部变量:没有默认初始化值。要想使用,必须先赋值。
(3)存储位置区别:
成员变量:存储在堆中。
局部变量:存储在栈中。
(4)生命周期区别:
成员变量:随着对象的创建而存在。随着对象的消失而消失。
局部变量:随着方法的调用而存在,随着方法调用完毕而消失。
 更严谨地说当局部变量的作用域结束时,即被销毁。


就近原则:局部变量有,就用局部变量,局部变量没有,就找成员变量。
如果成员变量也没有就报错



3:接口
(1)当一个抽象类中的方法都是抽象的时候,java就提供了一种更抽象的表达方式,叫接口。
(2)接口的成员特点:
A:成员变量 是常量 默认修饰符 public static final
B:成员方法 抽象方法 默认修饰符 public abstract
(3)接口的特点:
A:接口用interface修饰
B:子类实现接口用implements标识
C:接口不能被实例化
D:子类实现接口的时候,要么是抽象类,要么全部实现接口方法
(4)接口和类的关系
A:类与类的关系
继承关系,只能单继承,可以多层继承。
B:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
C:接口与接口的关系
继承关系,可以单继承,也可以多继承。
(5)接口的思想特点(理解)
A:对外暴露的规则(USB接口)
B:程序的扩展功能(多态)
C:降低程序的耦合性(多态)
D:让类可以多实现
(6)接口和抽象类的区别
共性:都是不断抽取出来的抽象的内容。

A:成员特点
抽象类:
成员变量 可以变量,也可以常量
成员方法 可以抽象,也可以非抽象
构造方法 有
接口:
成员变量 只能是常量
成员方法 只能是抽象
构造方法 无
B:继承或者实现关系特点
a:类与类的关系
继承关系,只能单继承,可以多层继承。
b:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
c:接口与接口的关系
继承关系,可以单继承,也可以多继承。
C:设计区别
抽象类中定义的是体系的共性内容。表达的是:is a的关系。
接口中定义的是体系的扩展功能。表达的是:like a的关系。


(7)如何实现一个继承体系
分析:由具体到抽象
实现:由抽象到具体


学习:抽象的内容,因为它定义的是共性内容。

使用:具体的内容,因为它才是具体实现,才具体更多的功能。

内部类:
(1)把类定义在一个类的内部。
(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
成员内部类:定义在类中方法外的内部类
(4)成员内部类
class Outer {
class Inner { }
}
普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
class Outer {
static class Inner {}
}
用静态修饰后:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();
成员内部类:
private:为了数据的安全。
static:为了方便调用。
(5)局部内部类
A:带名字的局部内部类
class Outer {
public void method() {
final int a = 10;
class Inner {
public void show() {
System.out.println("show");
System.out.println(a);
}
Inner i = new Inner();
i.show();
}
}
}
B:匿名内部类:
a:没有名字的内部类。其本质是一个对象。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};


本质:是一个继承了类或者实现了接口的子类匿名对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值