面向对象编程(OOP): 本质是以类的方式组织代码,以对象的组织(封装)数据。
OOP三大特性:封装、继承、多态。
认识论角度理解:先有对象后有类,对象是具体的事物,类是对象的抽象。
编码角度理解:先有类后又对象,类是对象的模具。
Java传值方式:值传递,引用传递(传对象,本质还是值传递,但实参会受影响)。结论:Java只有值传递。
? 1.和类名相同
? 2.没有返回值
作用:1,new的本质是调用构造方法
? 2,初始化对象的值
注:定义有参构造后,如果想使用无参构造,必须显示定义出无参构造方法。
实例化对象的原理图:
封装:属性私有,提供get、set方法
继承:子类扩展(extends)父类,java只有单继承,但能实现多个接口。所都的类都直接或间接的继承Object类,该类就算未未定义任何方法,new出的实例也有许多继承而来的方法,如toString,equles等方法。
super与this: this表示当前对象本身(本身调用者这个对象),super表示子类调用父类,super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行。super只能出现在子类的方法中。
多态:同一方法可以根据发送的对象不同而采取不同的行为方式,多态是方法的多态,继承关系是基础,不然转换时会报类型转换异常。
例如:Cat子类继承Pet父类。
Cat a1 = new Cat();
Pet a2 = new Cat();//父类的引用指向子类对象
a1.eat();
a2.eat();
向上转型:子类转换为父类(自动转换,丢失子类中原本可以直接调用的特有方法)
向下转型:父类转换为子类(需强转)
注意点:
Static:修饰的变量和方法属于类,可以直接用类名+ . 的方式调用,不用new对象再由对象去调用。
由final修饰的类不能被继承
如果类中只有private的构造方法,那么此类不可以被继承。
其原因在于:
(1)一个类一定会有构造函数,如果不写,那就是默认的无参构造函数,如果写,就只有所写的构造函数。
(2)子类的构造函数一定会调用父类的构造函数,但是如果父类中只有私有的构造方法,那么子类就无法调用父类,就会有问题。
原文地址:https://www.cnblogs.com/shanqiu24/p/14920749.html