Java面向对象之类的继承介绍

目录
  • 继承的作用
    • 如果没有继承机制是怎么样的?
    • 使用继承机制后的示例?
    • 类的继承是什么?
  • 子类和父类的继承机制
    • Java单继承
    • Java继承的顶级父类:Object
  • 对象的类型转换
    • 对象向上转型
    • 对象向下转型
  • 总结

继承的作用

如果没有继承机制是怎么样的?

有以下两个类,分别是Student、Teacher,它们的实现类如下:

/**
 * 老师类 封装了姓名、年龄
 *
 * @author Administrator
 *
 */
public class Teacher {
	private String name;
	private int age;

	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 class Student {
	private String name;
	private int age;

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

我们发现,这两个类中的属性和方法都是一样的,或者说这两个类都有相同的某些特性。

使用继承机制后的示例?

先写一个Person父类:

public class Person {
	private String name;
	private int age;

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

两个类继承Person

public class Teacher extends Person {

}
public class Student extends Person {

}

再写个测试类看一下:

public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		s.setName("学生");
		Teacher t = new Teacher();
		t.setName("老师");
		System.out.println(s.getName() + " " + t.getName());
	}
}

类的继承是什么?

通过上面的演示,我们发现继承了Person类后,就算在Student、Teacher类中不写对应的方法,也能使用父类的方法,这说明了子类继承了父类的属性和方法。其中Person叫做父类,Student、Teacher这样的由Person衍生的类叫做子类。继承的关键字是extends

继承的作用:减少重复的、冗余的相同属性和方法。

多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些相同的属性和行为,只有继承那个类即可。

子类和父类的继承机制

继承关系是两个类,一个为子类(派生类),一个是(父类)。子类继承父类,使用关键字extends表示(extends的意思是扩展,所以子类是对父类的扩展,就是说,我们还可以在子类中添加独属于它的属性和方法)。Java中的类只有单继承,没有多继承(一个儿子只能有一个爸爸,但是爸爸可以有多个儿子)

Java单继承

Java不支持多继承,只允许一个类直接继承另一个类;
子类只能有一个父类,extends 关键字后面只能有一个类名

public class Animal {

}
public class Person {

}

我们让Student继承Animal和Person:

发现不允许多继承。这里提一下,虽然不能多继承,但是可以实现多个接口。

虽然不能多继承,但不代表不能多重继承(爸爸的爸爸是爷爷):

public class Person extends Animal{

}
public class Student extends Person {

}

学生是人类,人类是动物,所以学生也是动物。

Java继承的顶级父类:Object

Object类是Java中所有类的始祖,Java中的每一个类都是由它扩展而来,但是并不明确写出要继承它,根据继承的特性,所有的Java类都拥有其方法

这里介绍Object中的常用方法:hashCode()toString()equals(Object obj),这也是所有类都有的方法。

hashCode()方法: 返回对象存储地址。

	public static void main(String[] args) {
		System.out.println(new Person().hashCode());
		System.out.println(new Person().hashCode());
	}

这个地址对于每个对象都是唯一的,如果两对象的hashCode值一样,说明它们是同一对象。

toString()方法:该方法用来返回对象的字符串表示形式。

	public static void main(String[] args) {
		System.out.println(new Person().toString());
		System.out.println(new Person().toString());
	}

默认的toString()方法是类名+@+hashCode()相关的唯一标识。

看源码如下:

现在我们重写一下toString()方法:

public class Person {
	private String name;
	private int age;

	public Person() {
		this.name = "未命名";
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

运行结果:

equals(Object obj): 该方法用于判断两个对象是否相同,如果没有被重写,其与==等价。

	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1.equals(p2));
	}

equals方法源码如下:

Object的equals方法比较的就是两对象的地址。
String类的equals方法就被重写了。

对象的类型转换

对象向上转型

子类转换成为父类,向上转型
格式: 父类名称 对象名称 = new 子类名称();
含义: 把创建的子类对象当做父类看待和使用

public class Person {
	public void run() {
		System.out.println("Person run");
	}
}
public class Student extends Person{
	public void study() {
		System.out.println("Student study");
	}
}
public class Test {
	public static void main(String[] args) {
		// 子类的对象 当作 父类的类型 使用,向上转型
		Person stu = new Student();
		stu.run();
		// 父类不能调用子类特有的方法
//		stu.study();

	}
}

对象向下转型

父类转换为子类,向下转型
子类 引用 = (子类) 父类对象
强制类型转换

	public static void main(String[] args) {
		Person p = new Person();// 向下转型
		Student stu = (Student) p;

		Student stu1 = (Student) new Person();// 还可以这样写

		stu.run();
		stu.study();
	}

需要注意可能会报java.lang.ClassCastException异常;
当应用程序代码尝试将某一对象转换为某一子类时,如果该对象并非该子类的实例,JVM就会抛出ClassCastException异常。

以下情况就不会报类型转换的异常,因为原本就是Student类的,强转回来依旧是Student类

	public static void main(String[] args) {
		Person p = new Student();
		Student stu = (Student) p;
		stu.run();
		stu.study();
	}

明显地,类的类型转换就跟基本数据类型的转换写法一致。

总结

到此这篇关于Java面向对象之类的继承介绍的文章就介绍到这了,更多相关Java继承内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java的继承

    目录 继承: 继承的好处: 继承的坏处: 继承的特点: 继承和成员变量之间的关系: this关键字和super关键字的区别 方法的重写: 总结 继承: 把多个类相同的内容提取到另外一个类中,然后使用关键字extends来实现继承 继承的好处: 1.提高了代码的复用性 2.提高了代码的维护性 只需要修改父类的内容 3.让类与类之间产生了继承关系,为了后面的多态做铺垫,要有继承才能做多态 继承的坏处: 1.类的耦合性增强了,一个父类改变了,子类也跟着改变 2.只可以单个继承,不可以多个继承,可以多层

  • Java继承与多态的正确打开方式

    目录 一.概述 二.继承 2.1 继承的概述 2.2 继承机制 2.3 类中属性,方法的继承与覆盖 1.属性的继承与覆盖 2.方法的继承与覆盖 2.4 super 关键字 三. 多态 总结 一.概述 面向对象程序设计的三大原则是封装性,继承性和多态性.继承性是子类自动共享父类的数据和方法的机制,它是由类的派生功能体现的.继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组件新的类,便于代码的重用.而多态是指不同类型的对象接收相同的消息时产生不同的行为,这里的消

  • java面向对象继承与多态介绍

    目录 一.概述 二.继承 2.1 继承的概述 2.2 继承机制 2.3 类中属性,方法的继承与覆盖 2.4 super 关键字 三. 多态 总结 一.概述 面向对象程序设计的三大原则是封装性,继承性和多态性.继承性是子类自动共享父类的数据和方法的机制,它是由类的派生功能体现的.继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组件新的类,便于代码的重用.而多态是指不同类型的对象接收相同的消息时产生不同的行为,这里的消息主要是对类成员函数的调用,而不同的行为是指

  • Java语言之包和继承详解

    目录 一.包 包名 类的导入与静态导入 在包中添加类 包访问权限 二.继承 类.超类与子类 重写方法(override) this与super的区别: 子类构造器 protected关键字 阻止继承:final关键字 组合 总结 一.包 包名 在讲包名前,我们先来了解一下,包是用来干什么的? Java中允许使用包(package),包将类组织在一个集合中.借助包可以方便管理组织自己的代码,并将自己的代码与别人的提供的代码库分开管理. 包是组织类的一种方式.使用包的主要目的就是保证类的唯一性. 在

  • 浅谈Java封装、继承、多态特性

    目录 1.封装 2.继承 3.多态 4.上代码,效果运行放在最后 1.封装 什么是封装,谈谈自己对封装的理解,封装就是将类的信息(比如说类的属性)隐藏在类的内部,不允许外部程序直接访问.此时就要提到一个关键字private,他是一个权限修饰符,可以用来修饰成员(变量和方法),保护成员不被其他别的类来使用,如果需要被其他类来使用,那么需要提供对应的操作:a.提供get变量名()方法,用于获取成员变量的值 b.提供set变量名(参数),用于设置成员变量的值,同样也和get方法一样,都是用public

  • Java面向对象之类的继承介绍

    目录 继承的作用 如果没有继承机制是怎么样的? 使用继承机制后的示例? 类的继承是什么? 子类和父类的继承机制 Java单继承 Java继承的顶级父类:Object 对象的类型转换 对象向上转型 对象向下转型 总结 继承的作用 如果没有继承机制是怎么样的? 有以下两个类,分别是Student.Teacher,它们的实现类如下: /** * 老师类 封装了姓名.年龄 * * @author Administrator * */ public class Teacher { private Stri

  • Java面向对象程序设计:继承,多态用法实例分析

    本文实例讲述了Java面向对象程序设计:继承,多态用法.分享给大家供大家参考,具体如下: 本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类(父类/超类/基类)即可.[比如,泰迪狗类也是狗类,狗的属性,泰迪狗也应该是有的,那么泰迪狗类在定义的时候就不必要添加那些与狗类重复的属性了,而是直接继承狗类即可.在多个狗类的子类(泰迪狗,二哈,柴犬)的时候,直

  • Java面向对象关键字extends继承的深入讲解

    目录 一. 问题引出 二.继承extends 2.1 继承的用法 2.2 基本语法 2.3继承的好处 2.4继承性 总结 一. 问题引出 面向对象的编程思想使得代码中创建的类更加具体,他们都有各自的属性,方法.有的时候一些客观事物之前存在一些联系,那么他们在代码中的具体类也存在一些联系. 例如:设计一个动物类 public class Animal { public String name; public int age; public Animal(String name) { this.na

  • 详细理解JAVA面向对象的封装,继承,多态,抽象

    目录 类和对象的使用(面向对象思想落地的实现): 子类对象实例化的全过程 1.从结果上看:(继承性) 2.从过程上来看: 1.封装性 2.继承性 继承性的好处: 3.多态性 虚拟方法调用 4.抽象性 1.抽象类的特点: 2.天生的父类:抽象类 3.抽象方法 总结 创建类的对象 = 类的实例化 = 实例化类 类和对象的使用(面向对象思想落地的实现): 1.创建类,设计类的成员 2.创建类的对象 3.通过"对象.属性"或"对象.方法"调用对象的结构 如果创建了一个类的多

  • java面向对象基础_final详细介绍

    final: 继承的弊端:打破了代码的封装性,final的出现正好弥补了这一弊端 final关键字: 1-final是一个修饰符,可以修饰类,方法,变量; 2-final修饰的类不能被继承 3-final修饰的方法不可以被覆盖 4-final修饰的变量是一个常数,只能被赋值一次并且要在定义时就将其赋予某值 规则: 被定义final的常量要用大写字母表示,各单词之间用下划线_来隔开. 实例一: class Father01{ final String FATHER01_NAME = "张三&quo

  • Java面向对象编程(封装/继承/多态)实例解析

    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容. 封装 封装一个Teacher和Student类 package com.hz.test; public class Teacher { private String name; private String majorDirection; private String teachCourse; private int teachAge; public Teacher() { super(); } public Teacher(Stri

  • Java 面向对象之继承篇详解原理与特点

    目录 一.前言 二.继承 什么是继承呢? 继承的好处与弊端 继承的使用场景? 继承的格式: 继承的特点: 重写的概念: super关键字 super和this的比较 一.前言 前面我也们讲述了相关封装的,现在我们先认识的继承的概念和使用. 二.继承 什么是继承呢? 继承在显示生活中也不少见,比如继承财产之类的,在我们java学习中也有类似的使用, 继承者称作子类也叫派生类,被继承者称作父类.基类或超类,objec类是所有类的父类 (后期介绍) 继承的好处与弊端 好处:就是提高了代码的维护性(多个

  • JAVA面向对象之继承 super入门解析

    目录 1 继承 1.1概念 1.2 特点 1.3 练习:继承入门案例 2 super 3 继承的用法 3.1 练习:super之继承中成员变量使用 3.2 练习:super之继承中构造方法的使用 4 方法重写Override 4.1 练习:继承中成员方法的使用 5 拓展 5.1 继承的好处与坏处 5.2 this与super的区别 5.3 重载Overload与重写Override的区别 1 继承 1.1概念 继承是面向对象最显著的一个特征 继承是从已有的类中派生出新的类,新类能吸收已有类的数据

  • 学生视角看Java 面向对象的继承本质

    1.什么是继承? (1)用来提高代码的复用性 (2)将相同的功能模块封装到方法中需要使用时调用方法达到代码复用的目的 (3)通过继承将多个类中的相同的类容摘取出来,变成一个新类,让其他类和当前的新类产生关系,达到代码复用性的目的 注意:Java是单继承与c++有区别 ,c++可以多继承. 2.继承的格式 关键字extends 3.继承的特性 *子类拥有父类非 private 的属性.方法. *子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. *子类可以用自己的方式实现父类的方法. *Ja

随机推荐