为什么使用继承?
将重复的代码放到父类中使用继承来进行使用
可以帮助我们后期修改代码和减少代码量
比如说Dog类和Penguin类
下图中两个类图没有继承之前的属性和方法
继承后
由此可见当将重复的属性和方法抽出来之后,Dog类和Penguin类就减少了很多代码。
注意: 子类与父类是is-a的关系。也就是说可以有多个子类,但只有一个父类!!
如何使用继承
首先将重复的代码和属性抽取出来,将他们放在一个类中,类名自定义如:
class Pet{
//可以放重复的属性和方法,Pet是类名,可以自定义。
}
我们将Pet作为父类,Dog继承Pet类,如
class Dog extends Pet{
//子类中的方法和属性
}
//关键字extends表示继承的含义
重写和继承中的构造方法
/*
*继承Pet类
*/
public class Dog extends Pet{
private String strain; //品种
/**
*有参构造方法
*name 名称
*strain 品种
*/
public Dog(String name,String strain){
super(name); //调用父类的name赋值要用super
this.strain=strain;
}
public String getStrain(){
return strain;
}
/*
*
* 重写父类的print()方法
*
*/
public void print(){
super.print(); //调用父类print方法
System.out.println("性别是:"+this.sex+"。");
}
}
子类中,根据需求可以从父类继承的方法重新编写,方法的重写或方法的重载
super关键字可以访问父类的成员
注意
super只能在子类或子类的构造方法中使用
super可以访问父类的属性、方法、和构造方法
super不能访问被private访问修饰符的类
super不能和this一起出现在同一个构造方法中
super必须在构造方法中的第一行
重写条件和重载条件
1.重写的方法名和返回类型、形参相同,方法体不同
2.重载的方名相同,类名相同,形参不同
调用构造方法
1.在类中,创建构造方法时,会自动生成一个无参构造方法
2.当调用构造方法时,必须调用有相同的参数的构造方法
3.当类中没有写构造方法时,会自动生成一个无参构造方法,当有构造方法时(有参和无参一样),自动生成的无参方法就会被替换掉。
4.构造方法不能被继承
在类方法中不能出现this和super关键字
在实例方法中,this,super语句不要求是第一行,可以共存
抽象类
抽象类和抽象方法
将Pet抽象
public abstract class Pet{
protected String name="无名氏";
protected int health=100;
protected int love=0;
/**
*有参构造方法
*
*/
public Pet(String name) {
this.name=name;
}
public void print() {
System.out.println("宠物的自白\n我的名字叫"+this.name+",健康值是"+this.health+",和主人的亲密度是"+this.love+"。");
}
}
abstract 是抽象类的关键字
注意:
1.抽象类和抽象方法都通过adstract关键字来修饰
2.抽象类不能实例化,抽象类可以有一个或者多个抽象方法,全部的方法都是可以是抽象的
3.抽象方法不能有方法体,有抽象方法的类必须声明为抽象类,子类必须重写所有的抽象方法才能实例化,否者还是抽象类,不能实例化。
final关键字
1.final修饰的方法不能被重写
2.final修饰的变量(包括成员和局部)将变成常量,只能赋值一次,不能进行二次赋值
3.final修饰的类不能被继承