继承
继承是两个类之间的一种关系(从属关系),引入继承可以提高代码的复用性,缩短软件开发周期
语法:[修饰符] class B extends A (B为子类,A为父类(超类),extends:继承或扩展)
注:
1.一个类只能有一个父类(单重继承),若未指定父类,则父类是Object
2.子类继承父类的非private成员变量及成员方法,也可以增加自己的成员变量和成员方法
3.用子类的构造方法构造对象时,默认先调用父类的无参的构造方法
4.子类重定义父类成员:定义同名变量会隐藏父类变量,定义同名方法会覆盖父类方法
5.最终类(final修饰)不能派生子类,最终方法(final修饰)不能被子类改写
6.假设B是A的子类,则:
B b=new B( );b instanceof A=true;
A a=new B( )是可以的,new B( )会“塑形”为A
B b=new A( ) 和 B b=(B) new A( )均是错误的
A a=new B(); B b=(B)a;是正确的,第1句new B( )“塑形”为A,第2句还原为B
7.super的用法:
(1)super指代父类对象(同this类比,this指代当前对象,不能用在static方法中)
(2)当子类中有和父类中同名的属性和方法时,会隐藏或覆盖父类中的成员,如果要访问父类中 的成员,加上super前缀即可。
(3)子类构造方法调用父类构造方法用super,且要放在第一句
抽象类和抽象方法
抽象类定义:abstract class 类名{ }
抽象方法:无方法体,方法头以分号结束:abstract 方法返回类型 方法名(参数);
注:
①抽象类可有构造函数,但不能直接创建抽象类的对象
②抽象方法必须放在抽象类(或接口)中,抽象类中可以包含普通方法
(推论:抽象类的普通子类必须实现抽象类中所有抽象方法。)
接口
定义: [public] interface 接口名{ }
接口继承: [public] interface 接口名 extends 父接口列表 { }
接口实现: [修饰符] class 类名 implements 父接口列表{ }
注:
①接口可以实现多重继承,即一个接口或类可以有多个父接口
一个普通类实现接口就必须实现接口中所有抽象方法
②接口访问控制符只能为public或省略
③抽象类和接口区别 :接口不能有构造方法,不能包含成员变量,可以实现多重继承
接口可对不同类型对象的行为进行抽象,抽象类是对特定类型对象的抽象
修饰符
访问控制符
级别从小到大:private,默认,protected,public
含义:
同一个类 | 同一个包 | 不同包子类 | 不同包非子类 | |
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
非访问控制符
abstract可以修饰类或方法,分别表示抽象类和抽象方法
final可以修饰类、方法、成员属性和局部变量,分别表示最终类、最终方法和常量
static修饰类成员,表示该成员属于类,通过类访问
注:
①abstract和final不能并列修饰同一个类
②abstract不能与private,static,final并列修饰同一个方法
多态
多态是指同一名字(功能)的方法有多种不同的实现
多态有两种实现:覆盖(Override)和重载(Overload):
1、方法的覆盖:指子类对父类方法的重新改写,子类方法的声明与父类完全相同
2、方法的重载:指一个类内部存在同名的方法,这些方法的参数类型或个数不同