1.类的继承(关键字extends),即A类继承B类,B类称为父类、超类或基类,A类称为子类、衍生类或导出类。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的属性或者方法,也可以用已存在的属性或者方法,这种技术能够非常容易地复用以前的代码,大大缩短开发周期,降低开发费用。
继承语法格式如下:
class 子类类名 extends 父类类名{
类定义部分;
}
注意:构造方法继承含有super();其意义是继承父类的意思,
super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参);
2.继承和访问权限
(1).子类可以继承父类中访问权限修饰符为public和protected的方法和属性;
(2).子类可以继承父类中用默认访问权限修饰的属性和方法,但前提是子类必须和父类在同一个包下;
(3).子类无法继承访问权限修饰符为private的属性和方法;
(4).子类无法继承父类的构造方法。
继承案例:
父类:
package test_method;
class Creature{
public Creature(){
System.out.println("Creater无参数的构造器");
}
public void test(){
System.out.println("Creature中的test()方法");
}
}
子类:
class Animal extends Creature{
public String name;
public int age;
public static int num;
public String booksname="数据结构";
public Animal(){
System.out.println("bbbbbb");
}
public Animal(String name){
test();
super.test();
System.out.println("Animal带一个参数的构造器,"+"该动物的name为"+name);
}
public Animal (String name,int age){
this(name);
num++;
System.out.println("Animal带两个参数的构造器,"+"其age为"+age);
}
public void test(){
System.out.println("Animal中的test()方法");
}
}
代码结果
Creater无参构造器
Animal中的test()方法
Creature中的test()方法
Animal带一个参数的构造器,该动物的name为灰太狼
Animal带两个参数构造器,其age为3
wolf无参数的构造器
2.多态
语法格式如下:
向上转型:父类引用指向子类对象,
父类名() 对象名=new 子类名();注意:子类必须继承这个父类,父类可能也继承了其他类,父类名()也可以替换成父类继承的基类的类名()。
好处:不用针对父类的多个子类重写方法,减少代码量,提高效率,但是不安全。
这样子类对象就有多重身份,但存在风险,因为子类可以调用父类的方法和属性等,但是父类调用不了子类独有的成员变量。
所以存在找不到数据等风险。
向下转型:语法:
子类类名() 对象名=new 子类类名();