Day06_java对象上

Day06_java对象上

面向对象编程(OOP)

面向对象编程的本质:以类的形式组织代码,以对象的组织(封装)数据。

IDEA添加out目录

Project structure—>Modules—>Add content root—>项目所在文件夹—>out。

构造器

规则

  1. 必须和类的名字相同。
  2. 必须没有返回类型,也不能写void。

作用

  1. 使用new关键字,本质是在调用构造器。
  2. 用来初始化值。

注意点

一旦定义了有参构造,如果想使用无参构造,必须定义无参构造。

继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。

  • java中只有单继承,没有多继承。

继承注意点

  1. 子类默认调用父类的无参构造。
  2. 父类如果有有参构造,子类可通过调用父类的有参构造继承父类,如有子类需要调用父类的无参构造,父类必须定义无参构造。

super注意点

  1. super()调用父类的构造方法,必须在构造方法的第一个。即子类构造器的第一句是super();
  2. super必须只能出现在子类的方法或者构造方法中。
  3. super和this不能同时调用构造方法。即不能同时出现在子类构造器中。

VS this

代表的对象不同:

this:对象本身。

super:父类对象的应用。

前提:

this:没有继承也可以使用。

super:只能在继承条件下才能使用。

构造方法:

this:本类的构造。

super:父类的构造。

#重写

需要有继承关系,子类重写父类的方法!

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大但不能缩小,public>protected>default>private.
  4. 抛出的异常:范围,可以缩小,但不能扩大

重写,子类的方法和父类必须要一致,方法体不同。

为什么需要重写:

  1. 父类的功能,子类不一定需要,或者不一定满足。

静态方法:方法调用只和对象的类型的有关,例:

//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();

存在条件

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象

多态注意事项

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系。 经常爆出类型转换异常:ClassCastException

不能重写的方法:

  1. static 方法,属于类,不属于实例;
  2. final 常量;
  3. private方法;
原文地址:https://www.cnblogs.com/gaoyao/p/13341933.html