【Java面向对象】java学习之旅13-继承

定义:

父类派生出子类,子类继承父类,子类可以获得父类的属性和方法.

使用:

  • extends关键字,声明子类继承父类.
  • super关键字,用于指代父类对象(创建子类对象之前,会先创建父类对象)
  • super()代表父类构造方法,super.方法名()调用父类方法,super.属性名调用父类的属性

例:

/**
 * 人类(父类)
 */
 public class Person { // 声明类名,一个java文件中只能有一个被public修饰的类,并且这个类的类名和文件名一致。

	// 实体类的属性,用来描述对象的特征。
	private String name;
	private int age;
	private char sex;
	private String color;
	
	// 构造方法,用于实例化对象并初始化赋值。
	public Person() {
	}

	public Person(String name, int age, char sex, String color) {
		// this指代的是当前对象,构造方法即将创建的这个对象,或者方法的调用对象。
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.color = color;
	}

	// getters/setters方法,用于操作私有属性,还可以完成对传入值的合法性校验.
	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

	public char getSex() {
		return sex;
	}

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

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	// 类的方法,用于描述对象的行为.
	public void eat() {
		System.out.println("吃东西");
	}
	
	public void sleep() {
		System.out.println("睡觉");
	}
	
	// 重写自Object类,用于将对象的所有属性格式化成一个字符串,便于编程过程中的调试.
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex + ", color=" + color + "]";
	}
	
}
/**
 * 学生类(继承父类)
 */
public class Student extends Person {

	public Student() {
		super(); // 父类的无参构造
	}

	public Student(String name, int age, char sex, String color) {
		// super指代父类对象
		super(name, age, sex, color); // 父类的有参构造
	}
	
	public void study() {
		System.out.println("学习敲代码");
	}
	
	@Override
	public void sleep() {
		System.out.println("好好学习,睡什么睡");
	}
	
	public void sleepFromSuperclass() {
		// 通过super关键字调用父类的其他方法
		super.sleep();
	}
	
	//覆盖或者重写父类的方法
	public String toString() {
		return "Student [name=" + getName() + ", age=" + getAge() + ", sex=" + getSex() + ", color=" + getColor() + "]";
	}
	
}

java继承的注意事项
  1. java的继承是单继承,一个子类只能继承一个父类。
  2. 子类继承父类,创建子类对象,会先执行父类构造方法,再执行子类构造方法,无论是子类的有参还是无参,默认都会调用父类的无参构造。
  3. 子类不可以继承父类的私有属性、私有方法、构造方法、他包父类的默认属性和默认方法。
  4. 如果子类重写了父类方法,子类对象将会调用子类方法。
  5. 父类是抽象类,子类必须实现所有抽象方法,否则子类也是一个抽象类。
  6. 被final修饰的类,不能被继承,被final修饰的方法不能被重写。
  7. 如果一个类没有显示的继承父类,默认继承超级父类Object

引申以下概念:

重写

对继承来的父类方法进行重写

使用:

  1. 发生在父子类中
  2. 方法名相同,参数列表相同,返回值类型相同
  3. 权限修饰符范围不能比父类小
super vs this
  1. this代表本类对象的引用,super代表父类对象的引用
  2. this()代表本类构造方法,super()代表父类构造方法
  3. this和super代表构造方法,只能在构造方法中使用,并且必须是第一行,不能同时存在。
四大访问权限修饰符
访问修饰符含义作用范围
public公开的整个项目
protected受保护的本类、同包其他类、跨包子类
default默认的本类、同包其他类
private私有的本类

总结:

一个类继承自一个类它会获得那个类中的所有方法和属性,并且可以有自己的方法和属性

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值