11.继承、重写、权限修饰符

继承、重写、权限修饰符

继承(extends)

1.关键字

extends

2.继承父类的属性和方法,私有属性方法和构造方法除外。

3.创建子类对象,会先默认调用父类的无参构造方法

4.可以使用super关键字调用父类构造方法。

super():指代父类无参构造

super(…):指代父类有参构造

必须在子类构造方法的第一行代码

5.可以使用super关键字调用父类的非私有的属性和方法。

super.属性名

super.方法名()

6.java的继承是单继承

一个类只能继承一个父类,但是可以继承父类的父类中的内容。

package org.jgs2007.demo;

/**
 * 爷爷类
 * 	如果没有显式继承父类,默认继承java.lang.Object类
 * 
 * @author junki
 * @date 2020年6月30日
 */
public class A {

	public A() {
		System.out.println("A无参构造");
	}
	
}

package org.jgs2007.demo;

/**
 * 父类
 * @author junki
 * @date 2020年6月30日
 */
public class B extends A {

	public B() {
		System.out.println("B无参构造");
	}
	
}

package org.jgs2007.demo;

/**
 * 子类
 * @author junki
 * @date 2020年6月30日
 */
public class C extends B {

	public C() {
		System.out.println("C无参构造");
	}
	
}

7.继承实现的是“is a”的关系。

继承示例

教师类

package org.jgs2007.demo;

/**
 * 教师类
 * @author junki
 * @date 2020年6月30日
 */
public class Teacher extends Person {

	private int teacherId;

	public Teacher() {
		super();
	}

	public Teacher(String name, char sex, int age, int teacherId) {
		super(name, sex, age);
		this.teacherId = teacherId;
	}

	public int getTeacherId() {
		return teacherId;
	}

	public void setTeacherId(int teacherId) {
		this.teacherId = teacherId;
	}
	
	public void showInfo() {
		System.out.println("name=" + getName() + ";sex=" + getSex() + ";age=" + getAge() + ";teacherId=" + this.teacherId);
	}

}

学生类

package org.jgs2007.demo;

/**
 * 学生类
 * @author junki
 * @date 2020年6月30日
 */
public class Student extends Person {
	
	private int studentId;

	public Student() {
	}

	public Student(String name, char sex, int age, int studentId) {
		super(name, sex, age);
		System.out.println("Student有参构造");
		this.studentId = studentId;
	}

	public int getStudentId() {
		return studentId;
	}

	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}
	
	public void showInfo() {
		System.out.println("name=" + getName() + ";sex=" + getSex() + ";age=" + getAge() + ";studentId=" + this.studentId);
	}
	
}

人 类(作为父类)

package org.jgs2007.demo;

/**
 * 	人类
 * @author junki
 * @date 2020年6月30日
 */
public class Person {

	private String name;
	
	private char sex;
	
	private int age;

	public Person() {
		System.out.println("Person无参构造");
	}

	public Person(String name, char sex, int age) {
		System.out.println("Person有参构造");
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

方法的重写

原因

子类要对父类的方法做新的实现

条件

1.发生在父子类中

2.方法名、参数列表

3.子类的返回值类型可以和父类相同,也可以是父类返回值类型的子类

4.子类的权限修饰符范围不能小于父类

5.子类声明的异常不能比父类大

6.方法体可以不同

@override注解

@override注解,编译时检查重写方法是否在父类中存在

权限修饰符

1.public(公开的):任意作用域都可以使用

2.protected(受保护的):本包、本包子类、他包子类可用,他包不可用

3.默认不写:本包、本包子类可用,他包子类、他包不可用

4.private(私有的):本包可用,本包子类、他包子类、他包不可用

其他注意事项

//TODO注释

标记位置,打开task窗口可以快捷查看或跳转到此处

== 和 equals() 之间的区别

1.==是一个运算符,equals()是一个方法。

2.==可以用于比较基本数据类型,比较值相等;也可以比较引用数据类型,比较内存地址相等。

3.equals()只能用于比较引用数据类型,如果重写了equeals()方法,比较值相等,否则比较内存地址相等。

public static void main(String[] args) {
		
		int a = 10;
		int b = 11;
		System.out.println(a == b);
		
		String str1 = "abc";
		String str2 = "abc";
		String str3 = new String("abc");
		System.out.println(str1.equals(str2));
		
		
		
		
	}

你可能感兴趣的:(javanote,java)