一. 代码复用的好处
1. 简化代码
2. 一处修改,处处修改
二. 什么是继承?
1. Java世界中同样也有继承关系,和现实世界中的继承类似。
2. 继承是从已有的类中派生出新类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
3. 继承是面向对象的三大特征之一。(多态、封装、继承)
三. 继承的语法格式
修饰符 class 子类 extends 父类{ }
↑(继承的关键字)
四. 继承的优点
1. 提高代码的复用性
2. 提高可维护性
3. 简化了逻辑
五. 继承的特点
1. 继承关系具有传递性(例如类A有父类B,类B拥有父类C,则C也可以称为是A的父类(不是直接父类))
2. 单继承
六. 方法的重写
1. 什么是方法的重写
当子类中出现与父类一模一样的方法时,子类对象调用该方法,会运行子类方法的内容,如同父类的方法被覆盖一样。这种情况是方法的另一种特性——重写。
覆盖的应用
当子类需要父类的功能,而功能主体子类有自己持有内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类持有的功能。
2.方法重载和方法重写区别(面试题)
方法重写Override:
继承中子类中出现与父类中方法声明完全相同的情况;
(返回值、方法名、参数都一模一样)
方法重载Overload:
在同一类中,方法名相同,参数列表不同;
3. 如何进行方法的重写
方法重写的规则
① 方法名相同
② 形参列表相同
③ 子类的方法的返回值应该比父类的返回值类型更小或相等
④ 子类方法抛出的异常类应该比父类抛出的异常类更小或相等
⑤ 子类方法的访问权限应该比父类方法访问权限更大或相等
package com.lenovo.demo; import java.util.ArrayList; import java.util.Scanner; /** * 图书管理系统 * * @author lenovo * */ public class Library { private static ArrayList<Book> booklist = new ArrayList<>(); private static int n; public static void main(String[] args) { do { listMenu(); } while (n != 0); System.out.println("程序退出"); } /** * 列出所有图书 */ private static void listAllBook() { for (Book book : booklist) { System.out.println("书名:" + book.getName() + ",出版社:" + book.getPublish() + ",作者:" + book.getAuthor() + ",页码:" + book.getPages() + ",价格:" + book.getPrice()); } } /** * 添加图书 */ private static void addBook() { System.out.println("请选择您要添加的图书类型:1.Book;2.Ebook;3.Magazine"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); switch (n) { case 1: System.out.println("请输入书名:"); sc.nextLine(); String name = sc.nextLine(); System.out.println("请输入出版社:"); String publish = sc.nextLine(); System.out.println("请输入作者:"); String author = sc.nextLine(); System.out.println("请输入页数:"); int pages = sc.nextInt(); System.out.println("请输入价格:"); double price = sc.nextDouble(); // 创建一个book对象 Book book = new Book(name, price, pages, publish, author); // 添加到ArrayList中 booklist.add(book); break; case 2: break; case 3: break; default: break; } } private static void listMenu() { System.out.println("请输入菜单序号:"); System.out.println("查看菜单:1"); System.out.println("添加图书:2"); System.out.println("删除图书:3"); System.out.println("退出程序:0"); Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); System.out.println("您选择的功能的序号是:" + n); switch (n) { case 1: listAllBook(); break; case 2: addBook(); break; case 3: break; default: break; } } } package com.lenovo.demo; /** * 纸质书 * @author lenovo * */ public class Book { private String name; private double price; private int pages; private String publish; private String author; public Book() { } public Book(String name, double price, int pages, String publish, String author) { super(); this.name = name; this.price = price; this.pages = pages; this.publish = publish; this.author = author; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public String getPublish() { return publish; } public void setPublish(String publish) { this.publish = publish; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } } package com.lenovo.demo; /** * 电子书 * @author lenovo * */ public class EBook { private String name; private double price; private int pages; private int downliadTimes; private String author; public EBook() {} public EBook(String name, double price, int pages, int downliadTimes, String author) { super(); this.name = name; this.price = price; this.pages = pages; this.downliadTimes = downliadTimes; this.author = author; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public int getDownliadTimes() { return downliadTimes; } public void setDownliadTimes(int downliadTimes) { this.downliadTimes = downliadTimes; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } } package com.lenovo.demo; /** * 杂志 * * @author lenovo * */ public class Magazine { private String name; private double price; private int pages; private String issue; public Magazine() { } public Magazine(String name, double price, int pages, String issue) { super(); this.name = name; this.price = price; this.pages = pages; this.issue = issue; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public String getIssue() { return issue; } public void setIssue(String issue) { this.issue = issue; } }
输出结果:
父类的方法
子类重写的方法
去掉super.setName();输出结果:
子类重写的方法