继承代表了一种is-a关系,如果说A是B,也就可以说A继承了B
父类更加通用
子类更加具体
优点:提高代码的复用性。
java中实现继承使用extends关键字,语法:
[修饰符] class 类名 extends 父类{ }
子类可以继承父类的非私有的属性和方法。
子类不能继承父类的构造方法。
java中继承是属于单继承,一个类只能有一个父类,但是一个父类可以有多个子类。
C++中可以存在多继承,java可以通过接口实现多继承。
方法的重写(override):一般发生在父子之间,子类重写的方法应该满足以下条件
1.子类的方法名,返回值类型,参数列表必须与父类相同
2.子类的修饰符范围>=父类的修饰符范围
修饰符范围:public>protected>默认>private
重载:方法名相同,参数列表不同
重写(override)和重载(overload)区别:
1.重写一般发生在父子之间,重载一般在同一个类中。
2.重写要求方法名,返回值类型,参数列表必须与父类相同,并且修饰符范围大于等于父类方法的修饰符范围。
重载方法名相同,参数列表不同,与返回值类型及修饰符无关。
3.作用不同。
重载主要是为了提供一种同名方法不同参数的能力(可以让一个类用于多个同名的方法)
重写主要是为了结合多态使用,提高程序扩展性和可维护性。
注意:一旦子类重写了父类中的方法,创建子类实例后,调用子类重写后的方法。
super关键字:代表直接父类的引用,类别this关键字进行记忆。
用法:
1.可以使用super关键字访问父类的属性: super.属性名
2.使用super关键字访问父类的方法:super.方法名()
3.使用super关键字调用父类的构造方法,但是必须作为构造方法的第一行语句存在。
注意:在静态方法中不能使用super和this关键字。
父类和子类中代码的执行顺序:
静态代码块在使用类时执行。
普通代码块在创建对象时执行。
父类的静态代码块>子类静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法
在创建子类时,先调用父类的构造方法先创建父类的实例,在创建子类的实例。
==和equals的区别
==在比较内容时分为以下两种情况:
1.使用==比较基本数据类型,做的值的比较,值相同返回true,否则返回false
2.使用==比较引用类型,比较不是内容是否相同,而是两个对象的引用(地址)是否相同,
如果指向相同的地址返回true,否则返回false。
equals():比较内容是否相同。
Object中的equals方法本质比较引用(==),如果需要按照内容进行比较是否相同,就需要重新Object中equals方法。