1、封装
概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作,常见的实现方式是:getter,setter。
成员变量:成员变量就是方法外部,类的内部定义的变量;随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
局部变量:局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量,局部变量中基础数据类型的引用和值都存储在栈中,对象引用存在栈中,对象存在堆中。作用的范围结束,栈帧释放,变量就消失。
2、继承
概念:继承是类与类的一种关系,子类拥有父类的所有属性和方法(private修饰的除外)从而实现了代码的复用。
继承与实现的区别
1)概念不同
继承:子类与父类的继承。如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同部分都放到父类里,让他们都继承这个类。
实现:接口的实现。如果多个类都有一个行为,但是处理的方法方式不同,那么就定义一个接口,也就是一个标准,让各个类分别实现这个接口,各自实现自己具体的处理方法。
2)关键词不同
继承:extends,实现:implements
3)数量不同
单继承,多实现。
4)属性不同
在接口中只能定义全局常量(static final),和空的方法体;而在继承中可以定义属性方法,变量,常量等...
5)限制不同
某个接口被类实现时,在类中一定要实现接口中的抽象方法;而继承则无需。注:接口中都是抽象方法
3、多态
引用多态:父类引用可以指向本类对象,也可以指向子类对象,引用多态的强大主要体现在调用属性、方法时,可以根据引用具体指向的对象去调用,例如:子类中重写父类的方法
class A extends B
左边是引用,右边new A()才是创建对象。
方法多态:子类中可以重写父类的方法,在调用方法时根据引用指向的子类对象决定调用哪个具体的方法。方法多态的强大体现在可以根据调用时参数的不同,而自主匹配调用的方法,列如:重载。
重写跟重载的区别?
重写:
1)、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2)、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3)、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4)、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
5)、声明为 final 的方法不能被重写。
6)、声明为 static 的方法不能被重写,但是能够被再次声明。
重载:
1)、重载的方法必须改变参数列表(参数个数或类型不一样);
2)、重载的方法可以改变返回类型;
3)、重载的方法可以声明新的或更广的检查异常;
4)、方法能够在同一个类中或者在一个子类中被重载。
5)、无法以返回值类型作为重载函数的区分标准。
构造方法是否可以被重写?
不能重写,但是可以被重载,知识点:子类不能继承父类的构造方法