一、继承
1.1 什么是继承
Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关系。
1.2 为什么要使用继承
在多个类中可能有重复的代码,我们将重复的代码抽取导父类中,以减少 代码的冗余
1.3 如何使用继承
使用关键字extends
class Dog extends Pet{ //子类Dog 继承了父类 Pet
}
示例:
public class Pet {
public String name;
public int age;
public void feed(){
System.out.println("喂食中...");
}
}
class Dog extends Pet{ //狗类继承宠物类
public static void main(String[] args) {
Dog dog = new Dog();
dog.name="旺财"; //子类对象访问父类中的属性
dog.feed(); //子类对象调用父类中的方法
}
}
1.4哪些情况下不可被继承
1.private修饰的成员
2.子类与父类不在同包用了默认的访问权限
3.构造方法
二、访问修饰符访问范围
**private:**私有的,只能在本类中可以访问
**default:**本类和同包中可以访问
**protected:**本类,同包以及其子类可以访问
**public:**公共的,处处可访问
示例:
package ExE; //在EXE包中
public class Pet {
public String name;
public int age; //public修饰
private int id; //private修饰
int card; //default修饰(缺省)
protected String address; //protected修饰
public void feed(){
System.out.println("喂食中...");
}
}
package ExE; //在EXE包中
class Dog extends Pet{
public static void main(String[] args) {
Dog dog = new Dog();
dog.name="旺财"; //访问成功,public处处可访问
dog.id=121; //访问失败,只有本类中可访问
dog.card=11; //访问成功,本类和同包中可以访问
dog.address="旺旺屋"; //本类,同包以及其子类可以访问
}
}
package EXE1; //在包EXE1中
import ExE.Pet;
public class Cat extends Pet {
public static void main(String[] args) {
Cat cat= new Cat();
cat.name="喵喵"; //public访问成功
cat.id=121; //private访问失败
cat.card=11; //default访问失败
cat.address="喵喵屋"; //protected访问成功
}
}
三、重写
3.1 什么是重写
1.出现在有子父类的情况下
2.方法名和参数列表都要相同
3.返回值类型相同或者是其子类
4.访问修饰符的权限不能严于父类
5.抛出的一场不能大于父类
3.2 为什么要重写
父类的方法不能满足子类的需求
示例:
public class Pet {
public String name;
public int age;
private int id;
int card;
protected String address;
public void feed(){
System.out.println("喂食中...");
}
}
class Dog extends Pet{
Dog dog = new Dog();
public void feed(){
System.out.println("吃骨头...") //重写了父类中的方法
}
}
四、抽象类
4.1 什么是抽象类
抽象方法必须是在抽象类中,但是抽象类中可以有抽象方法和普通方法
子类继承抽象的父类需要重写父类的所有方法,除非子类也是抽象类
抽象方法没有实体
抽象类不能创建对象
4.2 为什么要使用抽象类
声明一种规定,让子类必须要重写的内容
示例:
public abstract class Pet { //抽象类
public abstract void feed(); //抽象方法
}
}
class Dog extends Pet{
Dog dog = new Dog();
public void feed(){ //对抽象类中的方法进行重写
System.out.println("吃骨头...")
}
}