要想更好的使用类的继承,我们首先要知道为什么要使用累得继承,笔者做如下感想:
继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类。运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性。该类可以被更具体的类继承,每个具体的类都增加一些自己特有的东西。在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中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。
实验报告可能会涵盖以下内容:实验目的(理解并掌握类的继承)、实验步骤(定义`Shape`和`Circle`类,实现相关方法)、实验结果(展示代码运行输出,如圆形面积的计算)以及实验总结(类继承的概念及其在实际编程中...
### Java OOP理论:继承 #### 一、继承的基本概念 在Java面向对象编程...继承是Java面向对象编程的基础之一,它支持代码的复用和扩展。正确理解和运用继承的概念可以帮助开发人员构建更加灵活和可维护的软件系统。
### Java方法继承、方法重载、方法覆盖总结 在Java编程语言中,方法继承、方法重载、方法覆盖是三个非常重要的概念。它们之间既有关联又有区别,掌握这些概念对于深入理解面向对象编程有着至关重要的作用。 #### ...
总结起来,Java中的类继承是构建复杂系统的基础,它允许我们设计分层的类结构,实现代码复用,增强代码可读性和可维护性。通过理解继承、多态、覆盖和构造器等关键概念,开发者能够更有效地设计和实现面向对象的程序...
Java支持多层继承,即一个类可以从另一个类继承,而这个父类本身也可以从另一个父类继承,以此类推。但是Java不支持多继承,即一个类不能直接继承多个类。 #### 三、多态的概念 **3.1 多态的定义** 多态是指一个...
本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...
### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...
Java中的继承是面向对象三大特性之一,在知识点上存在许多重要的细节。下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是特殊的is-a关系,...
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
总结起来,Java的类继承、包和接口是面向对象编程的关键概念,它们帮助开发者构建可维护、可扩展的代码结构。通过类的继承,可以创建层次化的类结构,共享和复用代码;包提供了命名管理和访问控制;接口则定义了类...
封装继承多态总结
在Java编程中,设计一个银行账户类是学习面向对象编程的一个常见练习,它涉及到类的定义、对象的创建以及继承和多态的概念。在这个实验中,我们创建了一个名为`BankCount`的类来代表银行账户,并包含了一系列与账户...
在Java中,类继承机制是面向对象编程的基础之一。子类可以继承父类的所有成员变量和方法,并可以对其进行重写或扩展。在这个实验中,我们使用关键字extends来声明Child类继承自Parent类。 二、最大公约数和最小公...
在Java编程语言中,类的继承是面向对象...总结起来,Java类的继承提供了代码复用、结构扩展以及多态性等优势,是构建复杂系统的关键工具。通过熟练掌握这些概念,开发者可以构建出更加模块化、易于维护的Java应用程序。
Java中的继承是面向对象编程的一个核心特性,它允许一个类(子类或衍生类)从另一个类(父类或基类)中继承属性和行为,从而实现代码的重用和扩展。这种机制使得子类可以复用基类的公共功能,同时保留自己的独特功能...
总结起来,Java的继承机制允许我们构建类的层次结构,从而实现代码的复用和定制。`super`关键字用于调用父类的构造器、成员变量和方法,而方法覆盖则让我们能根据需要改变子类的行为。理解并熟练运用这些概念对于...
总结来说,Java的面向对象设计包括封装、继承和多态,这些特性使得代码更加模块化、可维护和可扩展。访问修饰符和方法修饰符提供了细粒度的控制,确保代码的质量和安全性。接口作为多态的重要工具,弥补了Java单一...