3.Java面向对象编程OOA/OOP/OOD/OOAD()/UML类图、函数式编程Scala(JVM)---类与对象、封装继承多态、构造方法、覆写/重写/override

一、绪论

1.面向对象编程范式(C++、Java、Go)------能进行现实生活的抽象。

            每个对象都是一个类。类中包含属性与方法。

  • OOA:面向对象分析
  • OOP:面向对象编程
  • OOD:面向对象设计 
  • OOAD()
  • UML类图

2.面向过程编程范式(C语言)

3.面向切口编程(EE-AOP)

4.面向接口编程---接口优先原则

5.函数式编程---Scala(JVM),如:()->{}

二、面向对象的三大特征:

1.封装性:将客观事物封装成一个抽象的类。

                 每个类都有自己的属性与方法,且每个类可以让自己的属性与方法只让可信的类与对象操作,对不可信的进行信息隐藏。

即:内部操作对外部而言不可见(保护性)。

2.继承性:可以使用现有类的所有功能,并且在无需重新编写原来的类的代码的情况下,可以进行功能上的扩展。(可重用)

3.多态性(*****):一个类实例的相同方法在不同情况下有不同的表现形式。

                 多态机制使得具有不同内部结构的对象可以共享相同的外部接口。(利用多态可以得到良好的设计)

三、类与对象

1.定义:

         类是共性的概念。对象是一个具体的、可以使用的事物。

         类是生产对象的。先有类,然后类new出一个对象,对象的所有属性与方法一定在类中有完整定义。

2.使用:

①类定义顺序:定义属性--->定义构造方法--->定义普通方法

class 类名{

    属性1;
    属性2;
    ......

    (构造方法、普通方法)
    方法1(){}
    方法2(){}
    ......
}
//    注:类中的属性与方法(不带static关键字的)只能通过对象调用。

②对象

         类名    对象名   =  new   类名();

         对象内存分析:

              (1)栈内存(虚拟机局部变量表):存放局部变量(各种基本数据类型、对象引用--对象名)

              (2)堆内存:保存对象。new表示在堆上新分配的空间。

              (3)垃圾空间:没有任何栈内存指向的堆内存空间。

四、private实现封装------使用内部类

1.类的属性与方法被private封装后,只能在本类中使用,类外部不可见。此时要想访问被封装的属性,必须提供getter与setter方法:

setter方法:主要进行属性内容的设置与修改。

getter方法:主要进行属性内容的取得。

2.类的设计原则:编写类的时候,如果没有额外说明,所有属性(成员变量)必须用private封装。

五、继承(关键字extends):在已有基础上进行功能上的扩充(可重用)

1.判断两个类之间能否使用继承:Student  is  a   Person.

          子类(派生类)、父类(超类、基类)

2.继承的限制:

       (1)子类对象实例化前,先调用构造方法产生父类对象,再调用子类构造方法实例化子类对象。

       (2)java的单继承局限

                          ①java只允许单继承,不允许多继承。

                          ②要想在java中实现类似的“多继承”,要么多层继承,要么使用内部类

                          ③继承时,子类会继承父类 的所有结构(包含私有域与其他属性、方法)。

  • 显示继承:所有非私有操作属于显示继承(可以直接调用)。
  • 隐式继承:所有私有操作属于隐式继承(不可以直接调用,需要通过其他形式调用)。

六、多态

1.向上转型(90%):用于参数统一化

父类  父类对象 = new  子类();

2.向下转型(1%):当父类引用需要调用子类扩充方法时,才需要向下转型

子类   子类对象 = (子类)父类对象;

                       注意:要发生向下转型,必须先发生向上转型。(认爹的过程)

Tips:①运行时异常-----ClassCastException(类型转换异常)。

②引用名instanceof类:表示该引用是否能表示该类实例,返回true/false。

七、构造方法(类中属性初始化)

1.三大特征:

                   (1)构造方法名必须与类名相同

                   (2)没有返回值类型声明

                   (3)每个类中一定至少存在一个构造方法。如果没有明确定义,系统会自动生成无参构造;如果在类中自定义了构造方法,系统不会再默认生成无参构造。

class Test{
    private String name;
    private int age;
    public Test(){}//无参构造
    public Test(String name){}//1个参数的构造方法
    public Test(String name,int age){}//2个参数的构造方法
}

2.构造方法的重载-------参数个数不同(无参构造->有参构造)

             如:上图三个Test()构造方法的重载,仅仅是参数个数不同。

 

八、覆写/重写/override:如果子类定义了与父类完全相同(不算权限)的方法或属性时,这样的操作就称为覆写

1.方法的覆写(*******):方法覆写不能出现private关键字​​​​​​​

             ①子类定义了与父类方法名、参数列表、返回值完全相同的方法。

             ②被覆写的方法不能拥有比父类更为严格的访问控制权限。

2.判断调用的是父类方法or子类方法

             ①看new在哪儿(当前使用的对象是通过哪个类new的)

             ②调用的方法有没有被子类覆写。如果被覆写,调用的一定是被覆写后的方法。

                如:Person  stu = new   Student();//向上转型,此时调用的是子类Student.

                 private < default(啥也不写)---包访问权限   <  public

3.属性的覆写(了解内容,不必深究)

          

猜你喜欢

转载自blog.csdn.net/qq_40408483/article/details/83446599