多态、抽象、Object类
1.方法重写要求:方法名相同、参数类型相同、返回值相同或其子类返回值相同,子类修饰符要不小于父类
2.方法重载要求:方法名相同、参数类型不同、返回值没有改变、修饰符无关
3.多态的前提是继承。多态是定义一个方法,根据不同的角色需要生成的环境来呈现不同的业务逻辑。
public class Member{
public void buyBook(){
}
}
public OrdinaryMember extends Member{
public void buyBook(){
System.out.println("普通会员买书打九折!");}
}
public SuperMember extends Member{
public void buyBook(){
System.out.println("超级会员买书打六折!");}
}
public Cashier(){
private OrdinaryMember ordinaryMember;
public setOrdinaryMember(Ordinarymember ordinaryMemberset){
this.ordinaryMember = ordinaryMember;}
public setSell(){
this.ordinaryMember.buyBook();}
}
public Test{
public static void main(String [] args){
OrdinaryMember ordinaryMember = new OrdinaryMember();
SuperMember superMember = new SuperMember();
Cashier cashier = new Cashier();
cashier..setOrdinaryMember(ordinaryMember);
cashier.setSell();
}
}
4.多态具体定义有两种形式:
第一种:定义时形参为父类,实际传入子类类型参数
public void setSell (Member member){
member.buyBook();}
Cashier cashier = new Cashier();
OrdinaryMember ordinaryMember = new OrdinaryMember();
cashier.setSell(ordinaryMember);
第二种:返回值类型为父类,实际调用方法时返回为子类类型
public Member getMember(String name){
if(name.equals("superMember")){
return superMember;}else{
return ordinaryMember;}
}
5.多态应用:
Member member= new OrdinaryMember();//将子类对象转换为父类对象
//父类引用指向子类
SuperMember SuperMember = (SuperMember)new Member();//强制转换
6.如果一个方法只有方法声明没有方法体,那么这个方法就是抽象方法,如果一个类中有一个抽象方法,那么这个类必须定义为抽象类,抽象类和方法通过abstract修饰
7.抽象类与普通类的区别在于:抽象类不能实例化。抽象方法与扑通通方法的区别:抽象方法没有方法体
8.抽象类中可以定义普通方法,但是普通类中不能定义抽象方法
9.如果父类中有抽象方法,一旦子类继承了父类,那么子类必须重写抽象方法
public abstract Member{
public abstract void buyBook();
}
public SuperMember extends Member(){
@Override
public void buyBook(){
System.out.println("超级会员买书打六折!");}
}
10.如果子类也是抽象类就不用了重写抽象方法
11.Object类:java中最大的类。
Java中定义的一些类以及开发人员写的类的父类都是java类
Object类中最常见的方法有public String toString()以字符串形式返回对象信息
public boolean equals()方法:判别两个对象是否相同
public int hashCode();返回对象散列码
都可以被子类重写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!