Java知识点3
Java知识点3
面向对象编程(OOP): 本质是以类的方式组织代码,以对象的组织(封装)数据。
OOP三大特性:封装、继承、多态。
认识论角度理解:先有对象后有类,对象是具体的事物,类是对象的抽象。
编码角度理解:先有类后又对象,类是对象的模具。
Java传值方式:值传递,引用传递(传对象,本质还是值传递,但实参会受影响)。结论:Java只有值传递。
构造器(构造方法):
? 1.和类名相同
? 2.没有返回值
作用:1,new的本质是调用构造方法
? 2,初始化对象的值
注:定义有参构造后,如果想使用无参构造,必须显示定义出无参构造方法。
实例化对象的原理图:
三大特性
封装:属性私有,提供get、set方法
继承:子类扩展(extends)父类,java只有单继承,但能实现多个接口。所都的类都直接或间接的继承Object类,该类就算未未定义任何方法,new出的实例也有许多继承而来的方法,如toString,equles等方法。
super与this: this表示当前对象本身(本身调用者这个对象),super表示子类调用父类,super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行。super只能出现在子类的方法中。
- super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
- this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
- super()和this()类似,区别是,super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
- super()和this()均需放在构造方法内第一行。
- 尽管可以用this调用一个构造器,但却不能调用两个。
- this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
多态:同一方法可以根据发送的对象不同而采取不同的行为方式,多态是方法的多态,继承关系是基础,不然转换时会报类型转换异常。
例如:Cat子类继承Pet父类。
Cat a1 = new Cat();
Pet a2 = new Cat();//父类的引用指向子类对象
a1.eat();
a2.eat();
- 若父类Pet中有eat()方法,且Cat子类未重写该方法,则a1,a2都调用的是各自类中的eat()方法了。注:Cat类中有eat()方法,继承来的。
- 若父类Pet中有eat()方法,且Cat子类重写了该方法,则a1,a2都调用的是Cat子类中的eat()方法。
- 若某个方法如:run()定义成Cat类中特有的方法,不是从Pet父类中继承来的,则a2.run()的调用将失败,但可以用 ((Cat) a2).run() 转型后调用Cat类中的run()方法。
向上转型:子类转换为父类(自动转换,丢失子类中原本可以直接调用的特有方法)
向下转型:父类转换为子类(需强转)
注意点:
- static修饰的方法属于类,不属于实例,不能被重写。
- final修饰的属于常量方法,不能被重写。
- private修饰的属于私有方法,不能被重写。
Static:修饰的变量和方法属于类,可以直接用类名+ . 的方式调用,不用new对象再由对象去调用。
-
由final修饰的类不能被继承
-
如果类中只有private的构造方法,那么此类不可以被继承。
其原因在于:
(1)一个类一定会有构造函数,如果不写,那就是默认的无参构造函数,如果写,就只有所写的构造函数。
(2)子类的构造函数一定会调用父类的构造函数,但是如果父类中只有私有的构造方法,那么子类就无法调用父类,就会有问题。