多个类中存在相同的属性和方法时,将这个内容抽取出来放到一个单独类中,那么多个类无需定义属性和方法,子需要继承单独类即可
子类继承父类之后,子类是可以直接访问父类中的属性和方法(非private的)
2、继承的格式public class A extends B{
}
public class 子类 extends 父类{
}
上面代码中的A就是子类 ,B就是父类
3、继承的好处为什么要有继承?
提高代码复用性
4、继承的注意事项1.在Java中子类只能单继承,就是一个子类只能继承一个父类
2.在Java中子类可以多层继承
3.在Java中子类和父类的概念是相互的,即一个类可以是子类,也可以是父类
4.子类在继承父类的时候,子类只能继承到父类的非私有的和构造方法
原因:构造方法名字必须跟类名一致,构造方法的作用创建对象
5.在子类时,先要创建父类对象,再去创建子类对象
必须先有你爸才能你
注意:
想要再子类中调用父类的构造方法,通过super关键字来进行调用
super(参数值)
6.一个类可以被多个子类继承(有多个儿子)
5、子类继承父类的属性①子类和父类中的属性同名
public class Fu {
public int num = 5;
}
class Zi extends Fu{
//若子类中没有定义属性,则使用父类中的属性
//若子类中定义属性了,则使用子类中定义的属性
public int num = 10;
}
class Test1{
public static void main(String[] args) {
//创建子类对象
Zi zi = new Zi();
System.out.println(zi.num);//10
System.out.println(zi.num);//10
//创建父类对象
Fu fu = new Fu();
System.out.println(fu.num);
//System.out.println(fu.num_zi);//父类中无法访问子类特有的属性
}
}
总结:若子类中没有定义属性,则使用父类中的属性;若子类中定义属性了,则使用子类中定义的属性
②子类和父类中的属性不同名
6、子类继承父类的方法通过调用不同的属性名来区分调用是子类还是父类的
public class Fu {
public int num = 5;
public void show(){
System.out.println("Fu类中的show方法");
}
}
class Zi extends Fu{
//若子类中没有定义属性,则使用父类中的属性
//若子类中定义属性了,则使用子类中定义的属性
public int num = 10;
public void show(){
System.out.println("Zi类中的show方法");
}
}
class Test1{
public static void main(String[] args) {
//创建子类对象
Zi zi = new Zi();
System.out.println(zi.num);//10
System.out.println(zi.num);//10
//调用方法
//若子类中没有定义则使用父类中的方法;若子类中已定义方法,则使用子类中的方法
zi.show();//Zi类中的show方法
zi.show();//Zi类中的show方法
//创建父类对象
Fu fu = new Fu();
System.out.println(fu.num);
//System.out.println(fu.num_zi);//父类中无法访问子类特有的属性
}
}
7、方法的重写(覆盖)
若想要发生方法的重写操作,那么一定的要存在子父类关系(extends) ,才能发生方法的重写
什么时候需要方法的重写?
子类发现继承父类的方法,无法应用使用(无法满足子类的需求)的时候,则可以让子类重写父类的方法
方法重写的注意事项:
①子类重写的方法一定要和父类中的方法保持一致(除了方法体之外)
②子类重写方法的访问权限修饰符一定要等于或大于父类方法的权限修饰符
权限修饰符:public > protected > default > private
| 修饰符 | 描述 |
|---|---|
| private | 私有的。在本类中访问 |
| public | 共有的。在整个项目中访问 |
| default | 默认的,缺省的。在同包中访问 |
| protected | 受保护的。在同包中访问或不同包的子类 |
③子类重写的方法抛出的异常不能比父类抛出的异常要大 抛出:错误的意思



