问题:
当创建了类的对象后,如果直接通过“对象.属性”的方式对对应的对象属性赋值的话,可能会出现不满足实际情况的意外
我们考虑不让对象直接作用属性,而通过“对象.方法”的形式,来控制对象对属性的访问。实际情况中,对属性的要求就可以通过
方法来体现。
解决的办法:
(封装与隐藏的思想)1. 将类的属性私有化,2. 提供公共的方法(getter&setter)类实现。
作用:是赋值,拿值
提供公共的方法(getter&setter)方式:
ctrl+alt+s,打开source菜单栏,可以创建Generate Getter&Setter方法
也可以通过该方法创建有参构造器和无参构造器
上方的Student空参构造器中的super();会去自动调用父类中的Person空参构造器,并且这里的super:(),可以省略,但他执行步骤不能少。
多态的使用前提:
1. 要有类的继承
2. 要有子类对父类方法的重写
(java中的多态主要是指子类对象的多态性,也就是说父类满足不了子类的需求,需要重写方法,在子类中重写方法,左边会显示绿色△三角形图标)
向上转型:(也就是装箱)
1. 子类的对象赋给父类的引用,父类的引用指向子类的对象
2. 对于多态来说:编译的时候看“左边”,运行的时候看“右边”。
向下转型:(也就是拆箱)
3. 当子类对象赋给父类的引用后,父类的引用只能调用父类的方法,不能调用子类中特有的方法,如果想调用子类中特有的方法,必需把父类的引用向下转型(“拆箱”)。
4. 如果把一个子类向上转型,转成一个父类的对象,然后把对象向下转型,一不小心把对象转成了其它子类的对象;此时编译不会报错,但运行会报错。
判断他是否能向下转型
语法:
if( 对象名 instanceof 子类){ }abstract修饰类:
abstract修饰类后,此类不能被实例化(也就是不能创建对象),即不能调用此类里的方法。
抽象类有构造器(凡是类都有构造器)
可以被继承,子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以被实例化。
子类继承抽象类,没有重写所有的抽象方法,意味着此类中任然有父类中的抽象方法,则此类必需声明为抽象的。
abstract修饰方法:
abstract修饰方法后,此方法就是一个抽象方法,抽象方法是没有“方法体”的。(抽象方法只能在抽象类中,而抽象类中可
以没有抽象方法)
抽象方法只能保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写次抽象方法。