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));
		
		
		
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java方法重写是指在子类中重新定义与其父类中具有相同名称、参数类型和返回值类型的方法的过程。重写方法的条件如下: 1. 方法名与参数列表必须与被重写方法的方法名和参数列表完全相同。 2. 返回类型必须与被重写方法的返回类型相同或者是其子类。 3. 访问修饰符不能比被重写方法的修饰符更严格。比如,如果父类中的方法为public,则子类中的该方法也必须为public,或者更为宽松的访问权限,而不是protected或private。 4. 子类中抛出的异常类型必须与被重写方法的异常类型相同或者是其子类。 5. 被重写的方法不能是private类型。 6. 静态方法不能被重写,但可以被隐藏。 7. final方法不能被重写。 通过符合以上条件的方法重写,实现子类父类方法的扩展和优化,提高代码的可重用性和扩展性,同时也更好地满足了OOP的封装、继承和多态原则。 ### 回答2: Java中的方法重写指的是子类中重新定义和父类中已有的方法具有相同名称和参数,并且具有相同的返回类型或者是返回类型为子类的情况下的重写过程。 在Java中,方法重写需要满足以下条件: 1. 方法名必须相同 重写的方法名必须与父类中要被重写的方法名称相同,包括大小写。 2. 方法参数必须相同 重写的方法必须与被重写的方法的形式参数列表相同。如果两个方法的参数不同,那么它们就是两个不同的方法。 3. 方法返回值必须相同或者是父类方法返回值的子类 重写的方法返回值必须与被重写的方法的返回值类型相同或者是其类型的子类父类中方法的返回值类型如果是基本数据类型,则重写的方法的返回值类型一定要和其相同。 4. 访问修饰符必须相同 Java中的方法访问修饰符有public、protected、private和默认访问修饰符四种,重写的方法访问修饰符必须与被重写的方法的访问修饰符相同或者是更加宽松的访问修饰符。 5. 异常类型必须相同或者是子集 重写的方法声明抛出的异常类型必须和被重写的方法声明抛出的异常类型相同或者是其类型的子集。如果被重写的方法没有声明任何异常,那么重写的方法也不能声明异常。 总之,方法重写Java多态性的一种体现,它允许子类在不改变父类已有同名方法的情况下,重新定义已有的方法,来满足子类的需要。但需要注意的是,重写方法时需要遵循以上的条件。 ### 回答3: Java方法重写的条件主要有四点,分别是方法名、 参数列表、返回类型和访问修饰符。 首先,方法名必须与被重写方法的名称完全相同。其次,参数列表也必须与被重写方法的相同。参数列表应该有相同的参数顺序、类型和数量。如果参数类型或参数顺序不同,则不是方法的重写而是方法的重载。同时,返回类型应该与被重写方 法的返回类型相同或者是其子类,返回类型可以是原始类型或者是对象类型。如果返回类型不同,则不符合方法的重写条件。最后,访问修饰符也应该相同或者更为宽松。如果子类中所重写的方法的访问修饰符比父类中被重写的方法的访问修饰符更为严格,就不能表现出继承的特性,从而不能实现方法的重写。 需要注意的是,对于静态方法,不能被覆盖,只能隐藏,因为方法的调用是基于类而非对象的。因此,对于静态方法的方法签名,不能被更改,否则会编译错误。此外,私有方法也无法被重写,因为私有方法只在本类中使用。 总之,上述四个条件是Java方法重写的必要条件,满足这些条件才能成功实现方法重写,发挥出Java的面向对象的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值