Java基础学习第十讲:Java面向对象---继承

Java面向对象—继承

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
面向对象的三大核心特性:

  • 封装性
  • 继承性
  • 多态性

今天我们重点来讲解Java面向对象的第二个特性:继承性。

一、继承的定义

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。

二、继承的实现

继承使用 extends 关键字。
我们先定义一个人类的类,人类的类记录了人类的基本信息。

/**
 * 人类
 * @author Aires
 *
 */
public class Human {

	private String name;//姓名
	
	private int age;//年龄
	
	private char sex;//性别
	
	public Human() {}//人类无参构造方法

	public Human(String name, int age, char sex) {//人类有参构造方法
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}

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

我们再定义一个程序员类

/**
 * 程序人员
 * @author Aires
 *
 */
public class Programmer {

	private String language;//使用语言
	
	public Programmer() {}
	public Programmer(String language) {
		this.language = language;
	}

	public String getLanguage() {
		return language;
	}

	public void setLanguage(String language) {
		this.language = language;
	}
}

通过分析,我们可以知道程序员也是人类的一员,那么我们就让程序员类继承人类

public class Programmer extends Human

同时,我们在程序员的构造方法中就可以为人类的属性进行赋值

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

那么我们实例化程序员对象,看看结果

Programmer programmer=new Programmer("James Gosling", 67, '男', "Java");
		System.out.println(programmer.getName()+",今年"+programmer.getAge()+","+programmer.getSex()+"性,使用"+programmer.getLanguage()+"开发程序!");

在这里插入图片描述

三、继承的限制

  • Java之中使用extends关键字实现继承
  • Java之中只允许多层继承,不允许多重继承,Java存在单继承局限
  • Java之中,子类可以继承父类除private以为的所有的成员
  • 构造方法不能被继承
  • 子类使用父类成员时,使用super关键字,使用本类成员使用this关键字

四、super关键字

Super关键字,可以用来子类调用父类的成员用,它包括调用父类的public、protected修饰的变量方法。
注意事项:

  • 调用父类的方法:super.父类的方法
  • 同时super也可以调用父类的构造方法,但是父类中构造方法用private修饰时,不能有子类去继承
  • 子类可以没有构造方法,他会自动调用父类的构造方法
  • 在子类中可以调用父类的构造方法,super必须放在子类构造方法的首句

五、方法的重载(Overload)与重写(Override)

方法的重载:一个类中有多个具有相同名称但参数不同的方法,则称为方法重载。如果只需要执行一个操作,具有相同的方法名称将增加程序的可读性。

方法的重写::方法重写基于继承,子类继承父类,子类可以调用父类的方法,同时子类也可以重写父类中的方法,来实现和父类中不同的业务处理逻辑。重写要求子类中方法与父类中的方法名称相同,参数相同,参数类型相同。当子类调用该方法时,基类中的方法则被覆盖。方法重写即:重写父类方法,同名也同参。例如:

人类可以说话

public class Human{
	
	public void speak() {
		System.out.println("人类可以说话!");
	}
}

程序员可以说话,还可以使用计算机说话

public class Programmer extends Human{
		
		public void speak() {
			System.out.println("程序员可以说话!也可以使用计算机说话");
		}
}

结果是

		Human human=new Human();
		human.speak();
		Programmer programmer=new Programmer();
		programmer.speak();

在这里插入图片描述

六、final关键字

Java语言中,final关键字有多种用途,其主题都表示“不可变”,但背后的具体内容并不一样。当final关键字用于修饰类时表示该类不允许被继承;当它用于修饰方法时表示该方法在继承该类的子类中不允许被重写。 当final关键字用于修饰变量时表示该变量的值不可变;静态变量、实例成员变量、形式参数和局部变量都可以被final修饰。

final关键字修饰类
当用final关键字修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

public final class FinalDome {

}
public class FinalTest extends FinalDome{

}

在这里插入图片描述Ps:在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

final关键字修饰方法
当用final关键字修饰一个方法时,表明这个方法不能被重写,但是这个方法可以被重载。也就是说我们使用final关键字修饰一个方法时,相当于给这个方法上了一把锁。

public class FinalDome {
	
	public final void say() {
		System.out.println("我是终态方法,不能被重写");
	}

	public final void say(int i) {
		System.out.println("我是终态方法,不能被重写,但可以被重载");
	}
}

public class FinalTest extends FinalDome{

	public final void say() {
		System.out.println("我是终态方法,不能被重写");
	}

	public final void say(int i) {
		System.out.println("我是终态方法,不能被重写,但可以被重载");
	}
}

在这里插入图片描述
Ps:只有在想明确禁止该方法在子类中被重写的情况下才将方法设置为final的。父类中的private方法会隐式地被指定为final方法。

final关键字修饰变量
当用final关键字修饰一个变量时,则表明该变量的值无法被更改。

  • final修饰基本类型变量:因基本数据类型的值与真实的值是同一个,所以该变量的值不能改变,即不能重新赋值,是“编译时常量”(compile-time constant)
  • final修饰引用类型:因引用数据类型的值表示引用地址,真实的值为实际内容,所以该变量的引用地址不能改变,而引用地址里的存储内容可以变,是“运行时不变量”(runtime immutable variable)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java继承面向对象编程中的重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承使用关键字extends来实现,通过父类的引用可以调用子类的对象。 继承的好处之一是代码重用,通过继承我们可以在不重写父类的情况下使用其属性和方法,只需在子类中添加新的属性和方法即可。继承还能实现多态的概念,使得不同类型的对象可以以统一的方式进行处理。 JAVA中的多态性是基于继承和实现接口的,它允许不同的对象对相同的消息作出不同的响应。多态性通过方法重载和方法重写来实现。 方法重载(Overloading)是指在一个类中定义多个具有相同名字但参数列表不同的方法。在调用这些方法时,根据传入的参数类型和数量来决定使用哪个方法。方法重载可以提高程序的可读性和灵活性。 方法重写(Overriding)是指子类重新定义父类中已有的方法。子类重写父类的方法时,方法名、参数列表和返回类型要保持一致。通过方法重写,子类可以改变方法的实现细节,但方法的签名(方法名和参数列表)必须与父类保持一致。在运行时,根据对象的实际类型来调用相应的方法,即实现了多态性。 掌握Java继承和多态的概念,对于开发面向对象的程序至关重要。通过继承,我们可以构建更复杂、更模块化的程序结构。同时,多态性使得程序的逻辑更加灵活,能够更好地应对未来变化与扩展。在第10天学习继承和多态后,我们可以更好地设计和实现Java程序,并提高代码的可重用性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值