Java基础学习——面向对象
面向对象思想
面向对象(Object Oriented)是软件开发方法。面向对象(Procedure Oriented)是相对于面向过程来说的,指的是把相关的数据和方法组织为一个整体来看待。面向过程关注的是执行的过程,面向对象关注的是具备功能的对象。
面向对象的三大思想
OOA(Object Oriented Analysis):面向对象分析
OOD(Object Oriented Design):面向对象设计
OOP(Object Oriented Programming):面向对象程序
面向对象的三大特征
封装
1、隐藏具体的实现细节【安全性】
2、对外提供公共的访问方式【功能】
继承
1、子类可以继承父类的所有非私有成员(成员属性和成员方法)。
2、子类不可以继承父类的构造,但是默认访问父类的空参构造。
3、只可以单继承,不能多继承,但是可以多级继承。
多态
多态的前提:
- 有类的继承或接口的实现
- 子类重写父类的方法
- 父类引用指向子类对象
多态的成员访问特点:
- 属性:编译看父类,运行看父类 --- 只有父类有的,编译才能够通过<-多态的弊端产生的原因
- 功能:编译看父类,运行看子类
对于多态访问特点的理解:父类的引用指向子类的对象,可以理解为,fu的外在表现为父类,而实际内核是子类。
对于属性来说,表现的是外在的特征,所以属性的运行看的是父类;
而调用方法表现的是本质,所以运行的结果是子类。
//示例如下
public class E1 {
public static void main(String[] args) {
Fu fu = new Zi();// 3、父类的引用指向子类的对象
fu.say();//结果:=====子类 --->对于功能来说:编译看父类,运行看子类
//fu.show;---->编译报错
System.out.println(fu.name);//结果:父类 --->对于属性来说:编译看父类,运行看父类
//System.out.println(fu.age);---->编译报错
Zi zi = (Zi) fu;//向下转型
zi.show();//结果:=====子类show
}
}
class Fu{
String name = "父类";
public void say(){
System.out.println("=====父类");
}
}
class Zi extends Fu{ // 1、有类的继承或接口的实现
String name = "子类";
int age;
public void say(){ // 2、子类重写父类的方法
System.out.println("=====子类");
}
public void show(){
System.out.println("=====子类show");
}
}
多态的成员访问特点:
- 属性:编译看父类,运行看父类 --- 只有父类有的,编译才能够通过<-多态的弊端产生的原因
- 功能:编译看父类,运行看子类
多态的弊端:
不能访问子类特有的成员
应用场景:
当做形参传递使用
//例如在调用时
say("aaa");
//在定义该方法时,根本不需要指导具体的子类是谁,但是可以保证最终执行的是子类的功能
void say(Object o ){
//实际参数 ====> 形式参数 Object o = "aaa"; 形成了多态【父类引用指向子类的对象】
System.out.println(o);
}