多态 抽象与接口

本文深入探讨了多态的概念,包括其在继承、方法重写和对象引用中的运用,以及它如何提高程序的扩展性和灵活性。同时,文章详细讲解了抽象类和接口的特点与设计区别,为读者提供了在不同场景下选择合适设计模式的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

概念: 指的"对象"的多种形态
前提:

1.必须有继承|实现关系
2.要有方法重写
3.父类引用指向子类对象

成员的访问特点
成员变量:编译看左边,运行看左边.
成员方法:编译看左边,运行看右边.
class Fu{
		public int number = 10;
	
		public void methodFu(){
			sout("!!!!");
		}
	}
	
	class Zi extends Fu{
		public int number = 20;
		public int number1 = 20;
		public void methodZi(){
			sout("???");
		}
		public void methodFu(){
			sout("-----");
		}	
	}	
	
	Fu fu = new Zi();
	sout(fu.number1);//错误, 因为父类中没有number1,
	sout(fu.number);//正确, 10
	fu.methodFu();//正确的
``class Fu{
		private int number = 10;
		
		int getNumber(){
			return number;
		}
	
		public void methodFu(){
			sout("!!!!");
		}
	}
	
	class Zi extends Fu{
		public int number = 20;
		public int number1 = 20;
		public void methodZi(){
			sout("???");
		}
		int getNumber(){
			return number;
		}
		public void methodFu(){
			sout("-----");
		}	
	}
	Fu fu = new Zi();
	int number = fu.getNumber();//10
	

多态的好处和弊端

1.提高程序扩展性:让父类作为方法参数,可以接受这个父类下的任何子类对象
2.弊端:不能再使用子类特有的方法

解决方案:

1.向上转型.多态本身就是向上转型,子类看成父类的过程.

2.向下转型:卸妆的过程,将其从父类转成子类
格式:子类 变量名=(子类)父类的引用;
eg. Animal a = new Dog();
Dog d = (Dog)a;
向下转型一定是一个还原的操作,否则会报类型转换异常(ClassCaseException),

抽象(abstract)
abstract修饰类,称为抽象类,不能直接使用
abstract修饰方法,称为抽象方法,不能有方法体,是一个残缺的方法,必须在抽象类或者接口中.
特点:

1.抽象类中可以有非抽象方法
2.抽象方法必须在抽象类或接口中
3.抽象类不能实例化
4.我们可以定义抽象的子类,重写抽象类的所有抽象方法,使用子类,如果子类不想重写,子类必须定义为冲向累
使用场景:当我们在编写一个方法的时候,发现边写不下去了,原因又可能有多种实现,建议将方法抽象,让子类各自实现.
作用:定义规则和范围,强制所有子类去按照规则做事

接口
//定义类
   publice class 类名 {
//成员变量
//成员方法
//构造函数
	}
//定义接口
	publice interface 接口名{
//常量  默认被 publice static final修饰
//抽象方法    默认被 publice abstact 修饰
}

常量 默认被 publice static final修饰;
抽象方法 默认被 publice abstact 修饰

接口没有构造函数;类和类发生继承关系,使用extends(继承)类和接口发生关系,用implements(实现).
特点:不能直接实例化,重写其实现方法,然后创建实现类去使用
eg.

//定义接口:
publice interFace A{
		publice abstract void method();
}
//定义一个类去实现接口
publice class AImpl implements A{
		publice void method(){
			sout("重写")
}
}
A a=new AImpl();//

接口 变量名 = new 实现类(); 接口不能直接使用,可以使用接口的实现类

接口和类之间的关系
类和类:继承,支持单继承,多层继承
接口和类:实现,支持单实现,多实现.
接口和接口:继承,支持单继承,多继承,多层继承.
接口和抽象类的设计区别:
抽象类比较霸道,强制所有的子类必须实现,接口比较灵活,谁需要,谁实现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值