java_继承_方法重写

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");
	}
}

结果:
在这里插入图片描述


版权声明:本文为weixin_41812346原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。