Java基础学习——面向对象

面向对象思想

面向对象(Object Oriented)是软件开发方法。面向对象(Procedure Oriented)是相对于面向过程来说的,指的是把相关的数据和方法组织为一个整体来看待。面向过程关注的是执行的过程,面向对象关注的是具备功能的对象。

面向对象的三大思想

OOA(Object Oriented Analysis):面向对象分析
OOD(Object Oriented Design):面向对象设计
OOP(Object Oriented Programming):面向对象程序

面向对象的三大特征

封装

1、隐藏具体的实现细节【安全性】
2、对外提供公共的访问方式【功能】

继承

1、子类可以继承父类的所有非私有成员(成员属性和成员方法)。
2、子类不可以继承父类的构造,但是默认访问父类的空参构造。
3、只可以单继承,不能多继承,但是可以多级继承。

多态

多态的前提:

  1. 有类的继承或接口的实现
  2. 子类重写父类的方法
  3. 父类引用指向子类对象

多态的成员访问特点:

  1. 属性:编译看父类,运行看父类 --- 只有父类有的,编译才能够通过<-多态的弊端产生的原因
  2. 功能:编译看父类,运行看子类

对于多态访问特点的理解:父类的引用指向子类的对象,可以理解为,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");
    }
}

多态的成员访问特点:

  1. 属性:编译看父类,运行看父类 --- 只有父类有的,编译才能够通过<-多态的弊端产生的原因
  2. 功能:编译看父类,运行看子类

多态的弊端:
不能访问子类特有的成员

应用场景:
当做形参传递使用

//例如在调用时
say("aaa");

//在定义该方法时,根本不需要指导具体的子类是谁,但是可以保证最终执行的是子类的功能
void say(Object o ){
    //实际参数 ====> 形式参数  Object o = "aaa";   形成了多态【父类引用指向子类的对象】
     System.out.println(o);
}