1.访问权限修饰符
类的访问权限修饰符:
默认不写,public
类成员的访问权限修饰符
private < 默认不写 < protected < public
2.继承
将一些类中共有的信息(属性和方法)抽取到父类中,然后使用子类继承父类,子类将继承父类访问权限允许的属性和方法。构造方法不能被继承,只能被调用。这种方式可以简化代码,使整个程序结构更为统一。子类与父类是is - a的关系,也就是子类的父类。比如:狗是宠物,企鹅是宠物 等等……
3.super关键字
super关键字表示父类对象,可以访问
1.父类的构造方法 super(形参列表)
2.父类的访问权限允许的普通方法 super.方法名称
3.父类访问权限允许的属性 super.属性名
4.继承下的构造方法
1.创建子类对象默认调用父类的无参构造,除非子类显式的调用父类的有参构造。
2.子类使用super关键字调用父类的构造方法,只能出现在子类构造方法的第一句。与this访问构造方法规则相似。
构建父类
public class Pet {
private String name;
private int health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
void print(String type) {
System.out.println( type+" 的名字是" + this.getName() + " 健康值是" + this.getHealth() );
}
public Pet() {
}
public Pet(String name) {
this.name = name;
}
public Pet(String name,int health) {
this.name = name;
this.health = health;
}
}
构建子类
public class Dog extends Pet {
/*
* super关键字 可以访问父类的访问权限允许的属性和方法 构造方法
* this关键字可以访问同一个类中 属性 方法 构造方法
*/
private String strain;
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
// alt + s 选择生成构造器
public Dog(String name, int health, String strain) {
super(name, health);
this.strain = strain;
}
public Dog(String name) {
super(name);
}
public Dog() {}
/**
* 方法重写
* 1.存在于父子类之间
* 2.方法名称相同
* 3.参数列表相同
* 4.访问权限不能严于父类 不能窄化父类的请求
*
*
* 5.返回值相同或者是其子类
* 6.不能抛出比父类更多的异常
* 7.父类的静态方法可以被继承,但是不能被重写
* 8.父类的非静态方法,不能重写为静态方法
*
*/
/*
* @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误
* Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java
* 语言中的类、方法、变量、参数和包等都可以被标注。 和 Javadoc 不同,Java 标注可以通过反射获取标注内容。
* 在编译器生成类文件时,标注可以被嵌入到字节码中。 Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。
* 当然它也支持自定义 Java 标注。
* https://www.runoob.com/w3cnote/java-annotation.html
*/
@Override
public void print(String type) {
// System.out.println("狗类重写父类的print方法,父类的print方法将被覆盖");
super.print(type);
// 调用父类的print方法
System.out.println("dog's strain is " + this.getStrain());
}
}
测试
public class Test {
public static void main(String[] args) {
Dog dog1=new Dog("yuyi",100,"keji");
dog1.print("dog");
}
}
结果: