JAVA的三大特性之多态

多态

1、多态是什么?

多态就是同一个行为具有多个不同的表现形式或形态的能力。
比如打印机,彩色打印机打印效果是彩色,而黑白打印机的打印效果是黑白。就是说一个引用变量到底 会指向那个类的实例对象以及该引用变量发出的方法调用到底是哪个类中实现的方法,必须在程序运行期间才能决定。

2、实现多态的三个必要条件

1、继承(多个子类对同一方法的重写)
2、重写:子类实现父类的同名方法,并且参数的类型和个数完全相同。
(1)普通方法可以重写,static修饰的静态方法不能重写。
(2)重写中子类的方法访问权限不能低于父类的方法访问权限。
提到重写不得不再次区别一下重载
在这里插入图片描述
super
1、前面已经提到过方法的重写,也就是子类可以重写父类的方法,那么当子类对象调用重写方法时,调用的是子类的方法,而不是父类中已被重写的方法,要想调用父类中被重写的方法就需要使用关键字super
2、super表示获取到父类实例的引用,有以下两种用法:
(1)调用父类的构造方法
(a)隐式调用父类无参构造方法,就是不将调用过程写出来。程序会默认的去调用父类的无参构造方法

<pre name="code" class="java">public class SuperTest {
 
	public static void main(String[] args) {
		
		new Child();		//孩子类无参构造
		new Child("我是孩子类带参构造方法");	//孩子类带参构造
	}
}
 
class Father{
 
	String money;
	
	public Father(){			//父亲类无参构造
		System.out.println("我是父亲类无参构造方法");
	}
	
	public Father(String t){	//父亲类带参构造
		System.out.println("我是父亲类带参构造方法");
	}
}
 
class Child extends Father{
	
	public Child(){				//孩子类无参构造
		//若方法体不显示调用父类的任何构造方法,则默认调用父类的空构造方法,也就是默认添加一句super();代码
		System.out.println("我是子类的无参构造方法");
	}
	
	public Child(String info){	//孩子类带参构造
		//若方法体不显示调用父类的任何构造方法,则默认调用父类的空构造方法,也就是默认添加一句super();代码
		System.out.println(info);
	}
	
	public void test(){
		
	}
}

按照以上所说:在调用子类的无参构造方法之前会先调用父类的无参构造方法。同样,在调用子类的带参构造方法之前会先调用子类的无参构造方法。
执行结果:

我是父类的无参构造方法
我是子类的无参构造方法
我是父类的无参构造方法
我是子类的带参构造方法

注意!!!
1、必须在子类的构造方法中对父类的构造方法进行调用,不能在子类的其他方法中;


2、调用父类的构造方法的代码,必须写在子类构造方法的第一行。

(b)显示地调用父类的任何构造方法

super()//显示调用父类无参构造方法
super(参数1,参数2...//显示调用父类带参构造方法
class Child extends Father{
	
	public Child(){				//孩子类无参构造
		super();				//显式调用父类的无参构造,必须写在第一行
		System.out.println("我是子类的无参构造方法");
	}
	
	public Child(String info){	//孩子类带参构造
		super("带参构造方法");				//显式调用父类的带参构造,必须写在第一行
		System.out.println(info);
	}
	
	public void test(){
		
	}
}

打印结果

我是父类的无参构造方法
我是子类的无参构造方法
我是父类的带参构造方法
我是子类的带参构造方法

(2)调用父类的属性和一般方法

super.属性; // 调用父类的属性

super.方法();// 调用父类的方法

3、向上转型:父类引用子类的过程。如果发生了向上转型,父类只能用自己的方法
三种方式:
1、直接赋值在这里插入图片描述

2、方法传参
在这里插入图片描述
3、方法返回
在这里插入图片描述
向下转型:把父类给子类,前提:必须先进行向上转型
在这里插入图片描述

3、多态的实现方式

1、重写(在上面)
2、接口(实现接口 并覆盖接口中的同一方法)
接口相关知识点
3、抽象类和抽象方法
抽象类相关知识点

4、笔记

在这里插入图片描述
== 注this代表当前对象的引用==
this和super的区别:super代表父类的引用,可以调用父类的普通方法,且放在第一行
This代表当前对象的引用
构造方法内是否可以发生运行时绑定
抽象类:
1、包含抽象方法的类叫做抽象类。
2、抽象类不能被实例化
3、抽象类当中可以包含抽象方法,也可以包含非抽象法方法或成员变量
4、抽象类就是为了继承的
5、抽象方法不能是 private 的,
6、抽象类A如果继承了抽象类B那么抽象类A可以选择重写或不重写抽象类B中的方法。
7、抽象类重写了,那么继承后不需要重写。
在这里插入图片描述
接口
1、关键字为interface
2、接口当中的方法全部不能有具体的实现,都是抽象方法(默认)
3、接口当中的方法应尽量简洁
4、接口当中的成员变量默认为public static final
5、接口不能被实例化
6、类和接口之间的关系称为实现(只要发生了实现的关系)就可以进行向上转型,只要普通类实现了接口,那么接口类的方法必须重写
7、类和接口是实现,接口与接口是继承(可继承多个接口)且包含了多个接口的功能
A interface b
B extends a t
则要重写a和t
接口和抽象的区别:继承表达的是is—a–的关系,而接口表达的是具有xx属性

排序

自定义类型进行排序时需要实现接口,重写compareTO方法
在这里插入图片描述
在这里插入图片描述
克隆的空接口(标记接口):用来标志当前类可以被克隆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值