回顾
一、抽象
1.抽象类:必须使用abstract关键字修饰,同时抽象类不能被实例化;
2.抽象方法:方法和类一样必须使用abstract关键字修饰;没有方法体,同时抽象方法必须写在抽象类里
抽象类一般是父类,是实现某些抽象的功能
二、多态
一种事物多种形态:
- 多态的前提是必须写在继承里面
- 多态一般都有方法的重写
多态中访问变量的规则:
编译看左边,运行看左边
多态中访问方法:
编译看左边,运行看右边
向上转型:
父类名称 对象名= new 子类名称 (自动类型转换)
意义:父类的引用和执行子类的具体对象
缺点:不能够访问到子类独有的方法
向下转型:
子类名称 子类对象=(子类名称) 向上转型的对象名
向下转型会产生一个错误 : 类转换类型
可以通过关键instanceof 进行判断(避免)
if (c instanceof Thecar) {
Thecar thecar = (Thecar) c;
if (thecar.getBrand().equals(brand) && thecar.getType().equals(type)) {
return thecar;
}
} else if (c instanceof Bus) {
Bus bus = (Bus) c;
if (bus.getSeatCount() == seatCount && bus.getBrand().equals(brand)) {
return bus;
}
多态的两种体现形式:
1.以父类作为参数
2. 以父类作为返回值
三、接口
接口实际上是一些规范(抽象方法)
产生接口的原因:解决java的单继承问题
接口的关键字: interface
定义接口的语法:
访问修饰符 interface 接口名称{
} // 接口里都是抽象方法 ,不能有普通方法.
实现接口的语法 :
implements Pager,Link (implements 接口1,接口2)
接口的特点:
1.接口里没有变量, 都是常量
2.接口里的方法都是抽象方法
3.接口里没有构造方法
内部类
定义: 类里面嵌套一个类
内部类的语法:
public class 外部类名{
public class 内部类名{
}
}
内部类的特点
1.内部类可以获取外部类的属性与方法(包括私有的)
2. 外部类获取不到内部类的属性与方法
成员内部类
公有的内部类 :
获取内部类的语法是 :
外部类名 . 内部类 对象的名称= new 外部类().new 内部类()
私有的内部类 :
只能够本类访问
变量重名:如果外部类的变量与内部类的变量重名,可以使用相应语法进行调用
访问外部变量的语法:
类名.this.变量名
静态内部类
加上静态的关键字static,一般会去掉访问修饰符
静态内部类的语法:
Person.Man vc = new Person.Mant();
外部类.内部类 对象的名称 = new 外部类.内部类()
方法内部类 :
语法:
访问修饰符 返回值 方法名称 (参数列表){
class 类名 {
// 成员属性
// 成员方法
// 构造
}
1.不能有访问修饰符 ;
2.生命周期随着方法的开始而开始,结束而结束
3. 在方法里的内部类方法, 不能够直接调用,但是可以间接调用在外部类的方法里实例化这个对象(内部类),然后调用其(内部类)方法;
匿名内部类 : (没有名字)
1.一般是在继承或者实现的基础上
匿名内部类的语法:
new 抽象类或者接口{
// 必须实现的方法
}
访问修饰符:public > protected > 默认> private
总结:
在学习完JAVA的面向对象之后,了解到了面向对象的最重要的三个特点:封装、继承、多态,实际上的运用还是十分不熟悉,希望能够在日后的日子里能够更好的使用Java语言的这三个特性
疑问:
在方法的命名或者使用上,为什么很难找出这个方法是否需要返回值,特别是需要用到引用数据类型进行方法调用的时候,总感觉无从下手。