第2章 多态,抽象类,接口(理论)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析上面的程序片断,是否正确?
抽象类的语法
抽象类中的方法不能用private、final修饰
abstract class Person{ private String name=“person”; private abstract void printInfo(); }
分析上面的程序片断,是否正确?
3.接口
3.1 为什么需要接口
电子图书是书的一种,同时又是一种多媒体 class Book { private String name = " java oop" public String getAuthor() { return " tom "; } } class MediaBook extends Book,Media { private String name=“mediaBook”; } class Media { private String name = " media" public String getInfo() { return name; } }
方法重载
构造方法
public class Book{ String press; String bookName; public Book(){ System.out.println(“无参数的构造方法”); } public Book(String press){ this.press = press; System.out.println(“本书出版社的名称是:”+press); } public Book(String bookName,String press) { this.bookName = bookName; this.press = press; System.out.println(“本书的名称是:”+bookName); System.out.print(“本书出版社名称是:”+press); } public static void main(String args[]){ Book book1 = new Book(); Book book2 = new Book(“人民出版社”); Book book3 = new Book(“Java OOP”,”人民出版社”); } }
抽象类的语法
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
class Person{ private String name=“person”; public abstract void printInf(); }
abstract class Person{ private String name=“person”; public void printInfo{ } }
第二章
多态,抽象类,接口
课程回顾
面向对象的基本特征:封装、继承、多态 封装是对外隐藏类属性和方法的内部实现细节 访问修饰符的范围从小到大依次是:private,default,protected, public 继承可以实现代码重用;Java中不存在多继承;继承具有传递性;一个 类可以是子类,同时也可以是另外一个类的父类 this表示对象本身,super表示对父类的引用
定义抽象类
abstract class Book { public abstract String getAuthor(); }
Biblioteka Baidu
建立类继承抽象类
class ComputerBook exends Book{ public String getAuthor() { return “tom”; } }
class Demo { public static void main(String args[]) { Farmer farmer = new Farmer(); farmer.plant(new Apple()); } }
接口使用时机
抽象类与接口
抽象类
抽象类有构造方法 抽象类不允许多继承 有抽象方法的类一定是抽象类,抽象 类不一定有抽象方法 接口没有构造方法 接口允许多继承 接口中的属性是用public,static,final修饰的, 接口的方法是用public,abstract修饰的
分析上面的示例,找出程序中的错误
1.6 重载与重写的区别
重载(overload) 重写(override)
方法的名称相同,参数个数,类型不同 方法名称,参数列表,返回 类型完全与父类一致 方法的访问范围不要求 应用在一个类的内部 子类中提供的重写方法的范 围不能比父类中的小 应用在子父类继承关系中
定义一个接口 建立类实现接口 interface IComputer {
如何使用接口
接口允许多继承
interface InterfaceDemo extends IFruit,IFarmer { public int add(int x,int y); }
接口没有构造方法 接口中的属性是用public、static、final修饰的,接口中的方法是用 public、abstract修饰的
方法重写
class Book { public float getPrice() { return 50; } } public class ComputerBook extends Book { //getPrice方法重写了父类Book中的getPrice方法 protected float getPrcie() { return 65; } }
public class Farmer { public void plant(IFruit fruit) { System.out.println("plant:" +fruit.getName()); } }
class Apple implements IFruit { public String getName() { return "apple"; } } class Orange implements IFruit { public String getName() { return "orange"; } }
1.4 方法重载
方法重载
一个类中 方法名称相同
方法参数的个数与类 型不同
方法重载应用同一个类中 构造方法和普通一样也可以重载 方法的返回类型不做为区分方法重载的条件
方法重载
public class Book { public float getPrice() { return 50; } public float getPrice(int bookPage) { return 50*(bookPage/100); } public float getPrice(int bookPage,float discount) { return 50*(bookPage/100)*discount; } public static void main(String args[]) { Book book = new Book(); System.out.println(“图书的单价:”+book.getPrice()); System.out.println(“根据页数计算的价格:”+book.getPrice(200)); System.out.println(“根据页数折扣的价格:"+book.getPrice(200,0.5f)); } }
2.抽象类
2.1 为什么需要抽象类
动物都有自已的行为,小鸟和老虎继承了动物的行为,但小鸟和老虎的行 动方式不一样。在动物类中能给出行动的具体实现吗?
2.2 什么是抽象类
抽象类的作用类似于“模版”,其目的是方便开发人员根据抽象类的格 修改和创建新类 抽象类主要用于继承,有利于程序的扩展
式来
2.3 抽象类的语法
3.4 如何使用接口
class Computer { public static final boolean flag = true; public int add(int x,int y) { public int add(int x,int y); 用接口引用子类对象,访问接口的方法 return x+y; public int minus(int x,int y); IComputer icomputer = new Computer(); } } int total = icomputer.add(90,10); public int minus(int x,int y) { return x-y; } }
2.4 抽象类的使用时机
如果几个类具备相同的行为和特征,可以抽取这些共同的行为和特征 形成抽象类,抽象类是专门用于继承的
abstract class Person{ private String name; private int age; public abstract String getContent(); } class Worker extends Person{ private float salary ; public String getContent(){ } class Student extends Person{ private int score ; public String getContent(){ } }
方法重载
public class Book { String press; String bookName; public void printInfo(){ System.out.println(“书籍的名称是:java oop”); } public String printInfo(){ return “书籍的名称是javascript”; } }
MediaBook继承Book,Media,合理吗?
可以使用接口可以解决Java多继承的问题
3.2 现实生活中的接口
3.3 什么是接口
接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点 使用interface关键字定义接口 一般使用接口声明方法或常量,接口中的方法只能是声明,不能是 具体的实现
本章内容
多态 抽象类 接口
本章目标
掌握方法重载与方法重写 掌握抽象类与接口的用法
1.多态
1.1 为什么需要多态
public class Farmer { public void plantApple(Apple apple) { System.out.println(“plant apple”); } public void plantOrange(Orange orange) { System.out.println(“plant orange”);
}
} 当季节变化时需要增加相应的plant方法,并且修改方法的参数类型、可 扩展性和可维护性。
1.2 现实生活中的多态
打篮球
踢足球
1.3 什么是多态
多态
多态是指一个对外接口,多种实现方式。即一个接口使用不同实例执行 不同的操作。在Java中多态有两种表现形式:方法重载(overload)与重写 (override)
分析上面的示例,找出程序错误
1.5 方法重写
方法重写
子类与父类方法 名,返回类型相同
子类与父类方法的 参数列表相同
子类方法的访问范 围不能比父类小
方法重写
class Book { public float getPrice() { return 50; } } public class ComputerBook extends Book { //getPrice方法重写了父类Book中的getPrice方法 public float getPrcie() { return 65; } }
3.5 接口使用时机
如果一个类要使用分布在不同类中的属性和方法,需要借助接口实现 多继承 如果一个类方法的参数需要引用另外一个类,且该方法参数引用的类 型在不同的条件下会发生相应的改变,此时需使用接口
接口使用时机
interface IFruit { public String name="fruit"; public String getName(); }