1.面向对象编程范式(C++、Java、Go)------能进行现实生活的抽象。
每个对象都是一个类。类中包含属性与方法。
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)垃圾空间:没有任何栈内存指向的堆内存空间。
1.类的属性与方法被private封装后,只能在本类中使用,类外部不可见。此时要想访问被封装的属性,必须提供getter与setter方法:
setter方法:主要进行属性内容的设置与修改。
getter方法:主要进行属性内容的取得。
2.类的设计原则:编写类的时候,如果没有额外说明,所有属性(成员变量)必须用private封装。
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()构造方法的重载,仅仅是参数个数不同。
1.方法的覆写(*******):方法覆写不能出现private关键字
①子类定义了与父类方法名、参数列表、返回值完全相同的方法。
②被覆写的方法不能拥有比父类更为严格的访问控制权限。
2.判断调用的是父类方法or子类方法
①看new在哪儿(当前使用的对象是通过哪个类new的)
②调用的方法有没有被子类覆写。如果被覆写,调用的一定是被覆写后的方法。
如:Person stu = new Student();//向上转型,此时调用的是子类Student.
private < default(啥也不写)---包访问权限 < public
3.属性的覆写(了解内容,不必深究)