要想更好的使用类的继承,我们首先要知道为什么要使用累得继承,笔者做如下感想:
继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类。运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性。该类可以被更具体的类继承,每个具体的类都增加一些自己特有的东西。在Java 术语学中,被继承的类叫父类,继承超类的类叫子类。因此,子类继承了父类定义的所有实例变量和方法,并且为它自己增添了独特的元素。
继承的关键字:extends,基本格式为
public class 类名(子类,超类,派生类) extends 类名(父类,基类) {}
而子类能继承到了父类的哪些属性和方法
子类继承到了父类所有的属性和方法(public,protected,private,默认的)。
1.子类和父类在同一个包下,能调用的方法和属性:
只有私有的属性和方法不能在子类中和子类的对象调用。
2.子类和父类不同包,能调用的属性和方法:
子类中: 公有的,受保护的属性和方法
子类的对象:公有的属性和方法
而在继承关系中方法重写是经常被使用的!
方法重写的条件为:
1.必须要存在继承关系
2.返回值数据类型 ,方法名,参数个数,参数类型,参数顺序必须要和父类的完全一致。
3.子类重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
优先调用子类的方法,如果子类没有,则调用父类的。
而我们一定要弄清楚为什么要使用方法重写
因为在面向对象中,一个子类可以自动继承父类子类可见的方法,子类不用自己定义。但是有时候,有的子类在某些行为上有自己的特殊性,这时候在子类中就可能重写父类中的某些方法,来实现所谓的多态性。也就是说调用时,将调用子类重写的方法,而不是父类的方法。
关于继承和方法重写,笔者在这学期期末的时候做过一个课程设计用到过简单的类的继承,实现的是飞机票的预定、退订功能,飞机航班的输入以及查询功能,本来想在界面中来实现所有功能,无奈时间不够充裕最后放弃了,只能放弃界面,现附上代码如下!
package com.my; import java.util.*; public class Feijichang{ public static Scanner scan = new Scanner(System.in); public static void main(String[] args){ IFangfa If = new Fangfa(); while(true){ Display(); int i = scan.nextInt(); switch(i){ case 1: If.InputFly(); break; case 2:If.DisplayFly(); break; case 3:If.LookFly(); break; case 4:If.SellTicket(); break; case 5:If.changeFly(); break; case 6: System.exit(0); break; } } } public static void Display(){ System.out.println("*************************************************************************"); System.out.println(")\t\t\t\t\t\t\t\t\t("); System.out.println("(\t\t\t\t飞机订票系统\t\t\t\t)"); System.out.println(")\t\t\t\t\t\t\t\t\t("); System.out.println("*************************************************************************"); System.out.println(); System.out.println("*************************************************************************"); System.out.println("(\t\t\t\t\t\t\t\t\t)"); System.out.println(")\t\t\t\t1.录入班次信息\t\t\t\t("); System.out.println("(\t\t\t\t2.浏览班次信息\t\t\t\t)"); System.out.println(")\t\t\t\t3.查询路线 \t\t\t\t("); System.out.println("(\t\t\t\t4.售票和退票 \t\t\t\t)"); System.out.println(")\t\t\t\t5.修改航班信息\t\t\t\t("); System.out.println("(\t\t\t\t6.退出 \t\t\t\t)"); System.out.println(")\t\t\t\t\t\t\t\t\t("); System.out.println("*************************************************************************"); System.out.println("请选择操作:"); } }
package com.my; public interface IFangfa{ public void InputFly(); public void DisplayFly(); public void LookFly(); public void SellTicket(); public void changeFly(); }
package com.my; public class PeoMessage{ private String PeoName; private int FjNum; private int TkNum; public PeoMessage(String PeoName,int FjNum,int TkNum){ this.PeoName=PeoName; this.FjNum=FjNum; this.TkNum=TkNum; } public PeoMessage(){ } public void SetPeoName(String PeoName){ this.PeoName=PeoName; } public String GetPeoName(){ return this.PeoName; } public void SetFjNum(int FjNum){ this.FjNum=FjNum; } public int GetFjNum(){ return this.FjNum; } public void SetTkNum(int TkNum){ this.TkNum=TkNum; } public int GetTkNum(){ return this.TkNum; } public String toString(){ return GetPeoName()+" "+GetFjNum()+" "+GetTkNum(); } }
package com.my; import com.my.*; import java.util.*; import java.text.SimpleDateFormat; public class PlanMessage{ private int FeijiNum; private String StrTime; private String StrAddress; private String OverAddress; private String TakeTime; private int PeoNum; private int TickNum; public PlanMessage(int FeijiNum, String StrTime,String StrAddress,String OverAddress,String TakeTime,int PeoNum,int TickNum){ this.FeijiNum=FeijiNum; this.StrTime=StrTime; this.StrAddress=StrAddress; this.OverAddress=OverAddress; this.TakeTime=TakeTime; this.PeoNum=PeoNum; this.TickNum=TickNum; } public PlanMessage(){ } public void SetFeijiNum(int FeijiNum){ this.FeijiNum=FeijiNum; } public int GetFeijiNum(){ return this.FeijiNum; } public void SetStrTime(String StrTime){ this.StrTime=StrTime; } public String GetStrTime(){ return this.StrTime; } public void SetStrAddress(String StrAddress){ this.StrAddress=StrAddress; } public String GetStrAddress(){ return this.StrAddress; } public void SetOverAddress(String OverAddress){ this.OverAddress=OverAddress; } public String GetOverAddress(){ return this.OverAddress; } public void SetTaketime(String TakeTime){ this.TakeTime=TakeTime; } public String GetTakeTime(){ return this.TakeTime; } public void SetPeoNum(int PeoNum){ this.PeoNum=PeoNum; } public int GetPeoNum(){ return this.PeoNum; } public void SetTickNum(int TickNum){ this.TickNum=TickNum; } public int GetTickNum(){ return this.TickNum; } public String toString (){ try{ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = sdf.parse(GetStrTime()); Date d = new Date(); boolean b = d.after(date); if(d.after(date)){ return GetStrTime()+" \t"+GetStrAddress()+" \t"+GetOverAddress()+"\t "+GetTakeTime()+"\t "+GetPeoNum()+"\t "+GetTickNum() ; } else{ return "已出发"+" \t"+GetStrAddress()+" \t"+GetOverAddress()+"\t "+GetTakeTime()+"\t "+GetPeoNum()+"\t "+GetTickNum() ; } }catch(Exception ex){ System.out.println(ex); } return null; } }
package com.my; import java.util.*; import com.my.*; import java.lang.*; public class Fangfa implements IFangfa{ Scanner sc = new Scanner(System.in); List<Object> list = new ArrayList<Object>(); List<Object> li = new ArrayList<Object>(); public Fangfa(){ } public void InputFly(){ System.out.println("请输入航班班次:"); int FeijiNum=sc.nextInt(); System.out.println("请输入起飞时间:"); String StrTime = sc.next(); System.out.println("请输入起始站:"); String StrAddress = sc.next(); System.out.println("请输入终点站:"); String OverAddress = sc.next(); System.out.println("请输入飞行时间:"); String TakeTime = sc.next(); System.out.println("请输入额定载量:"); int PeoNum =sc.nextInt(); System.out.println("请输入已订票人数:"); int TickNum = sc.nextInt(); PlanMessage pl = new PlanMessage(FeijiNum,StrTime,StrAddress,OverAddress,TakeTime,PeoNum,TickNum); list.add(pl); System.out.println("录入成功"); System.out.println("已存入:"+list.size()); } public void DisplayFly(){ System.out.println("班次 "+"起飞时间 "+"起点站 "+"终点站 "+"飞行时间 "+"额定载量 "+"已订票人数"); for(int i=0;i<list.size();i++){ System.out.println(i+1+" "+list.get(i)); } } public void LookFly(){ System.out.println("1.按班次查询"); System.out.println("2.按终点站查询"); int j = sc.nextInt(); switch(j){ case 1:System.out.println("请输入要查询的班次:"); int n = sc.nextInt(); System.out.println("班次 "+"起飞时间 "+"起点站 "+"终点站 "+"飞行时间 "+"额定载量 "+"已订票人数"); System.out.println(n+"\t"+list.get(n-1)); break; case 2:System.out.println("请输入要查询的终点站:"); String zd = sc.next(); int l=0; for(int i=0;i<list.size();i++){ PlanMessage p = new PlanMessage(); p=(PlanMessage)list.get(i); if(zd.equals(p.GetOverAddress())){ System.out.println("班次 "+"起飞时间 "+"起点站 "+"终点站 "+"飞行时间 "+"额定载量 "+"已订票人数"); System.out.println(i+1+"\t"+list.get(i)); }else{ l++; } if(l==list.size()){ System.out.println("没有此航班"); } } break; } } public void SellTicket(){ System.out.println("1.售票"); System.out.println("2.退票"); int m=sc.nextInt(); switch(m){ case 1: System.out.println("请输入要购票的班次:"); int num = sc.nextInt(); System.out.println("请输入要订票数量:"); int g= sc.nextInt(); PlanMessage s = new PlanMessage(); s=(PlanMessage)list.get(num-1); if(g>s.GetPeoNum()-s.GetTickNum()){ System.out.println("余票不足,您是否需要预约"); System.out.println("1.是\t\t2.不是"); int c = sc.nextInt(); switch(c){ case 1:System.out.println("请登记您的信息:"); System.out.println("请输入您的姓名:"); String PeoNum = sc.next(); System.out.println("请输入您预定的航班号:"); int FjNum = sc.nextInt(); System.out.println("请输入您的预定票数:"); int TkNum = sc.nextInt(); PeoMessage peo =new PeoMessage(PeoNum,FjNum,TkNum); li.add(peo); System.out.println("预约成功"); break; case 2: break; } ; } else{ s.SetTickNum(s.GetTickNum()+g); System.out.println("班次 "+"起飞时间 "+"起点站 "+"终点站 "+"飞行时间 "+"额定载量 "+"已订票人数"); System.out.println(num+"\t"+list.get(num-1)); Random rand = new Random(); System.out.println("您的座位号是:"); for(int v=0;v<g;v++){ int r = rand.nextInt(s.GetPeoNum())+1; System.out.println(r+"\t"); } s.SetTickNum(s.GetTickNum()-g); list.set(num-1,s); } break; case 2:System.out.println("请输入要退票的班次:"); int feijinum = sc.nextInt(); PlanMessage pm = new PlanMessage(); pm=(PlanMessage)list.get(feijinum-1); int f =pm.GetTickNum(); pm.SetTickNum(f-1); list.set(feijinum-1,pm); System.out.println(feijinum+" "+list.get(feijinum-1)); System.out.println("退票成功"); PeoMessage ps = new PeoMessage(); for(int i=0;i<li.size();i++){ ps = (PeoMessage)li.get(i); if(ps.GetFjNum()==pm.GetFeijiNum()){ if(ps.GetTkNum()<=pm.GetPeoNum()-pm.GetTickNum()){ System.out.println("此航班"+i+1+"号预约者订票成功,座位号是:"); Random ran = new Random(); for(int v=0;v<ps.GetTkNum();v++){ int a = ran.nextInt(pm.GetPeoNum())+1; System.out.print(a+"\t"); } pm.SetTickNum(pm.GetTickNum()-ps.GetTkNum()); list.set(feijinum-1,pm); } } } break; } } public void changeFly(){ System.out.println("请输入要修改的班次:"); int k = sc.nextInt(); System.out.println("请输入新的航班信息:"); System.out.println("请输入新班次:"); int NewFeijiNum=sc.nextInt(); System.out.println("请输入新起飞时间:"); String NewStrTime = sc.next(); System.out.println("请输入新起始站:"); String NewStrAddress = sc.next(); System.out.println("请输入新终点站:"); String NewOverAddress = sc.next(); System.out.println("请输入新飞行时间:"); String NewTakeTime = sc.next(); System.out.println("请输入新额定数量:"); int NewPeoNum =sc.nextInt(); System.out.println("请输入新已订票人数:"); int NewTickNum = sc.nextInt(); PlanMessage pm= new PlanMessage(NewFeijiNum,NewStrTime,NewStrAddress,NewOverAddress,NewTakeTime,NewPeoNum,NewTickNum); list.set(k-1,pm); System.out.println("修改成功"); } }
相关推荐
JAVA中的继承学习总结JAVA中的继承学习总结
1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。
除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口...
封装继承多态总结
定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。
java的继承总结.doc
六、 继承(面向对象特征之一)★★★★ 25 七、 接口(面向对象特征之一)★★★★ 28 八、 多态(面向对象特征之一)★★★★ 30 九、 java.lang.Object 31 十、 异常★★★★ 34 十一、 包(package) 37 十二、 ...
枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 OutputStream 及其子类Reader 及其子类Writer 及其子类 注解 关于 ...
Java面向对象编程概述 Java类定义 内部类和继承 继承的使用 异常处理 数组 Java常用类 集合类 泛型化的集合框架 使用Java的输入/输出类 Java GUI和Swing 事件委托模型.....的详细概述
Class 对象由Java虚拟机在使用到该类的时候,自动创建; Class 对象的三种获取方式: 1: Class.forName(“全类名”); 2:类对象名.getClass(); 3:类名.Class(); 通过Class 对象获得类的指定成员,构造方法 构造方法...
JAVA 基础知识总结 第一章 Java 入门 第二章标示符,运算符 第三章表达式,语句 第四章数据类型,字符串,数组 第五章类,方法,关键字保留字 第六章对象,继承,接口, 包 1. 对象: 声明对象: 类名对象名称=null...
Java设计一个银行帐户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等帐户信息,成员方法包括存款、取款操作。
Java学习过程中的总结,对于继承部分的总结-----------------------------------------------------------------------------------------------------------------------------------------------
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...
继承 17 多态 17 代理 17 Static 17 Final 17 接⼝和抽象类 18 接⼝ 18 抽象类 18 异常 18 认识 Exception 18 什么是 Throwable 18 常⻅的 Exception 19 与 Exception 有关的 Java 关键字 19 什么是 Error 20 内部类...
java总结,基础语法,面向对象,封装继承多态,异常
7.5.1 Java的“多重继承” 7.5.2 通过继承扩展接口 7.5.3 常数分组 7.5.4 初始化接口中的字段 7.6 内部类 7.6.1 内部类和上溯造型 7.6.2 方法和作用域中的内部类 7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用...