Day06_java对象上
Day06_java对象上
面向对象编程(OOP)
面向对象编程的本质:以类的形式组织代码,以对象的组织(封装)数据。
IDEA添加out目录
Project structure—>Modules—>Add content root—>项目所在文件夹—>out。
构造器
规则
- 必须和类的名字相同。
- 必须没有返回类型,也不能写void。
作用
- 使用new关键字,本质是在调用构造器。
- 用来初始化值。
注意点
一旦定义了有参构造,如果想使用无参构造,必须定义无参构造。
继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
java中只有单继承,没有多继承。
继承注意点
- 子类默认调用父类的无参构造。
- 父类如果有有参构造,子类可通过调用父类的有参构造继承父类,如有子类需要调用父类的无参构造,父类必须定义无参构造。
super注意点
- super()调用父类的构造方法,必须在构造方法的第一个。即子类构造器的第一句是
super();
。 - super必须只能出现在子类的方法或者构造方法中。
- super和this不能同时调用构造方法。即不能同时出现在子类构造器中。
VS this
代表的对象不同:
this:对象本身。
super:父类对象的应用。
前提:
this:没有继承也可以使用。
super:只能在继承条件下才能使用。
构造方法:
this:本类的构造。
super:父类的构造。
#重写
需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小,public>protected>default>private.
- 抛出的异常:范围,可以缩小,但不能扩大
重写,子类的方法和父类必须要一致,方法体不同。
为什么需要重写:
- 父类的功能,子类不一定需要,或者不一定满足。
静态方法:方法调用只和对象的类型的有关,例:
//A是B的子类,test()是静态方法
B b = new A();
b.test();
此时调用的是类B内的test()方法。
非静态:此时将方法重写,例:
//A是B的子类,test()是非静态方法
B b = new A();
b.test();
此时父类B中的test()方法已被A类重写。
故方法重写只与非静态方法有关。
#多态
- 同一方法可以根据发送对象的不同而采用多种不同的行为方式。
- 一个对象的实际类型是确定的,但可以指向对象的的引用的类型有很多(父类,有关系的类)
例如:
//Person是父类,Student 是子类
//new Student(); new Person();的实际类型是确定的
//Person s2=new Student(); s2的类型是不确定的
//对象能调用那些方法,主要看对象左边的类型,和右边关系不大
//如下,Student类能调用的方法是自己的或者继承父类的
Student s1 =new Student();
//Person 父类型,可以指向子类,但是不能调用子类独有的方法
Person s2 =new Student();
存在条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
多态注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系。 经常爆出类型转换异常:ClassCastException
不能重写的方法:
- static 方法,属于类,不属于实例;
- final 常量;
- private方法;