【04章Java面向对象编程(中)】解密 继承性和多态性

❤写在前面
❤博客主页:努力的小鳴人
❤系列专栏:JavaSE超详总结😋
❤欢迎小伙伴们,点赞👍关注🔎收藏🍔一起学习!
❤如有错误的地方,还请小伙伴们指正!🌹

🔥系列传送门
【04章Java面向对象编程(上)】万事万物皆对象的初体验【全站热榜第二】
【附章1Java数组中常见算法】图文并茂详解十大排序算法让您回味无穷
【03章Java数组】程序员必看数组详解
【02章Java基本语法】详细讲解让你重新认识Java基本语法和流程流程控制
【01章Java语言概述】Java学了很久了吧,快回来熟悉熟悉吧(详细)
在这里插入图片描述


一、面向对象特征之二:继承性

●为描述和处理个人信息,定义类Person:

class Person {

		public String name;
		public int age;
		public Date birthDate;
		public String getInfo() {
		//...
	}
}

●为描述和处理学生信息,定义类Student:

class Student {

		public String name;
		public int age;
		public Date birthDate;
		public String school;
		public String getInfo() {
		// ...
	}
}

●通过继承,简化Student类的定义:

class Person {
		public String name;
		public int age;
		public Date birthDate;
		public String getInfo() {
		// ...
	}
}
class Student extends Person {
		public String school;
}

在这里插入图片描述
Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以使用

二、为什么要有继承?

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

  1. 语法规则:class Subclass extends SuperClass{ }
  2. 作用:
    ●继承的出现减少了代码冗余,提高了代码的复用性
    ●继承的出现,更有利于功能的扩展
    ●继承的出现让类与类之间产生了关系,提供了多态的前提
  3. 在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”
  4. Java只支持单继承和多层继承,不允许多重继承
    一个子类只能有一个父类
    ●一个父类可以派生出多个子类

🎁注:不要仅为了获取其他类中某个功能而去继承

👌继承的规则

子类不能直接访问父类中私有的 (private) 的成员变量和方法
在这里插入图片描述

三、方法的重写

override / overwrite

  1. 定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法
  2. 要求:
    ●子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
    ●子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
    ●子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
    子类不能重写父类中声明为private权限的方法
    ●子类方法抛出的异常不能大于父类被重写方法的异常

👌注意

子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写),因为static方法是属于类的,子类无法覆盖父类的方法
举例代码如下:

public class Person {
		public String name;
		public int age;
		public String getInfo() {
		return "Name: "+ name + "\n" +"age: "+ age;
	}
}
public class Student extends Person {
		public String school;
		public String getInfo() { //重写方法
		return "Name: "+ name + "\nage: "+ age+ "\nschool: "+ school;
}
public static void main(String args[]){
		Student s1=new Student();
		s1.name="Bob";
		s1.age=20;
		s1.school="school2";
		System.out.println(s1.getInfo()); //Name:Bob age:20 school:school2
	}
}

四、面向对象特征之三:多态性

多态性是面向对象中最重要的概念

👌对象的多态

  1. 在Java中的体现:对象的多态性>>父类的引用指向子类的对象
    ●可以直接应用在抽象类和接口
  2. 编译时,看左边;运行时,看右边
    ●若编译时类型和运行时类型不一致,就出现了对象的多态性
    ●多态情况下,
    看左边”:看的是父类的引用(父类中不具备子类特有的方法)
    看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)
  3. —在Java中,子类的对象可以替代父类的对象使用
    ●一个变量只能有一种确定的数据类型
    ●一个引用类型变量可能指向(引用)多种不同类型的对象
  4. 成员方法
    ●编译时:要查看引用变量所声明的类中是否有所调用的方法。
    ●运行时:调用实际new的对象所属的类中的重写方法。
  5. 成员变量:●不具备多态性,只看引用变量所声明的类

🎁注: 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法

类比基本数据类型

在这里插入图片描述

👌虚拟方法调用

子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法

五、Object类

Object类是所有Java类的根父类
 
如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
public class Person {

}
等价于:
public class Person extends Object {

}

  1. 主要结构:
    在这里插入图片描述

🎁总结:对于Java的三大特征,这篇文章中的继承性和多态性很是重要,在这些的学习中受益匪浅写了一点,希望对大家有用,还有呢方法重写在平时用的还算频繁

👌 作者算是一名Java初学者,文章如有错误,欢迎评论私信指正,一起学习~~
😊如果文章对小伙伴们来说有用的话,点赞👍关注🔎收藏🍔就是我的最大动力!
🚩不积跬步,无以至千里书接下回,欢迎再见🌹

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力的小鳴人

鳴人将永远记住您的恩惠

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

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

打赏作者

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

抵扣说明:

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

余额充值