Java继承与多态

本文详细探讨了Java中的继承和多态概念。在继承部分,讲解了Java中的一父对多子、重写与重构、构造函数的继承、this与super的用法以及内部类的继承和向上、向下转型。在多态部分,阐述了多态减少代码冗余的作用,并通过实例展示了如何利用多态简化子类的处理问题。
摘要由CSDN通过智能技术生成

目录

一、继承

1.1 Java继承一父对多子,一子对一父,且纵深到顶

1.2 重写(overwrite)与重构(over)

 1.3 构造函数的继承

1.4 this and super

1.4.1 this的意义

1.4.2 this的特殊用法——this与构造函数

1.4.3 super的意义

1.4.4 super的特殊用法——super与构造函数

1.5 内部类的继承

1.6 向上转型与向下转型

1.6.1 向上转型

1.6.2 向下转型

二、多态


一、继承

继承的意义:继承使得整个程序框架具有一定的弹性,在程序中复用一些已经定义完整的类可以减少开发周期,也可以提高软件的可维护性和扩展性。

接下来介绍Java继承的特性

1.1 Java继承一父对多子,一子对一父,且纵深到顶

一个子类最多只有一个父类(不同于C和C++),而且没有类可以成为自己的超类,即不能继承自己。但一个父类可以有多个子类。

子类会一直向上,继承父类中、爷爷类,无限祖先类中非private修饰符的成员,包括变量、方法、内部类,直到不再有继承的顶部。

实例:在不同的包testA,testB,testC下分别新建类文件A.java、B.java、C.java,然后用B继承A,C继承B。

package testA;

public class A {
	
	private String strA = "这是一个A的private变量";
	
	public String getStrA() {return strA;}
	public void setStrA(String strA) {this.strA = strA;}
}
package testB;

import testA.A;

public class B extends A{
	
	private String strB = "这是一个A的private变量";
		
	public String getStrB() {return strB;}
	public void setStrB(String strB) {this.strB = strB;}
}
package testC;

import testB.B;

public class C extends B{
	
	private String strC = "这是一个C的private变量";
	
	public String getStrC() {return strC;}
	public void setStrC(String strC) {this.strC = strC;}

	public static void main(String[] args) {		C c = new C();
		c.setStrA("父类A方法被子类C给调用了");
		c.setStrB("父类B方法被子类C给调用了");
		c.setStrC("子类C调用了自己的方法");
	}
}

1.2 重写(overwrite)与重构(over)

继承并不只是扩展祖先类的功能,还可以【重写】(还可以称为【覆盖】)祖先类的方法。

【重写】:重写一般是在项目测试前,发现父类的方法不适用于子类,要重新创建这样一个方法,可能原本一个形参,变成三个形参,原本是private,现在是public。

就是在子类中将【父类的成员方法名】保留,重写内容可以包括:

  • 成员方法的参数类型与个数
  • 成员方法的方法体内容
  • 成员方法的权限修饰符
  • 成员方法的返回值
package testA;
public class A {
	public void func() {System.out.println("这是A类public方法");}
}
package testB;
import testA.A;
public class B extends A{
	protected int func(int b) {System.out.println("这是B类的public方法"+b);return b;}
}
package testC;
import testB.B;
public class C extends B{
	private String c func(String c) {System.out.println("这是C类的public方法"+c);return c;}
}

【重构】:在不改变代码外在行为(原本接受的参数不变,返回值不变)的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减小整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。

重构保留【父类的成员方法名、成员方法的参数类型与个数、成员方法的权限修饰符、成员方法的返回值】,只修改成员【方法的方法体内容】。

package testA;
public class A {
	public void func1() {System.out.println("这是A类public方法");}
}
package testB;
import testA.A;
public class B extends A{
	public void func1() {System.out.println("这是B类的public方法");}
}
package testC;
import testB.B;
public class C extends B{
	public void func1() {System.out.println("这是C类的public方法");}
}

 1.3 构造函数的继承

如果父类中,没有明确定义的无参构造函数,即只有默认构造函数则子类可以任意建立构造函数

新建子类对象过程:在调用子类的构造函数时,会自动调用父类的默认构造函数。

package testA;
public class A {
}
package testB;
import testA.A;
public class B extends A{
	protected B(String b) {System.out.println("这是B类的有参构造函数");}
	protected B(char c) {System.out.println("这是B类的另一个有参构造函数");}
}

如果父类A中,有明确定义的无参构造函数,则子类可以任意建立构造函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

从零开始的智障生活

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

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

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

打赏作者

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

抵扣说明:

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

余额充值