目录
前言
多态前提和体现
有继承关系 有方法重写,没有重写的话,需要调用父类中的对应方法 有父类引用指向子类对象
成员访问特点
成员变量 编译看左边,运行看左边 //左边需要有一个继承关系,看父类里有没有
成员方法 编译看左边,运行看右边
静态方法 编译看左边,运行看左边
提示:以下是本篇文章正文内容,下面案例可供参考
一、多态是什么?
父类引用指向子类对象
格式:
父类名 变量名 = new 子类对象()
二、操作步骤
先考虑有哪些类,类中有哪些共同的属性方法来提取一个父类,每个类中特有的属性和方法,
然后再去编写
1.饮料购买
1. 编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供 选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还
是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
代码如下(示例):
import java.util.Scanner;
abstract class Beverage{ //一个抽象的父类,饮料
private String name;
private int capacity;
public Beverage() {
}
public Beverage(String name, int capacity) {
this.name = name;
this.capacity = capacity;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public abstract void show();
}
class Coffee extends Beverage{ //父类饮料的一个子类 咖啡
private String mixture;
public String getMixture(String mixture) {
return mixture;
}
public void setMixture(String mixture) {
this.mixture = mixture;
}
public Coffee(String mixture) {
this.mixture = mixture;
}
public Coffee() {
}
public Coffee(String name, String mixture, int capacity) {
super(name, capacity);
this.mixture = mixture;
}
@Override
public void show() {
System.out.println("名称: "+getName());
System.out.println("添加配料: "+mixture);
System.out.println("容量: "+getCapacity());
}
}
class Water extends Beverage{ // 父类的另一个子类 矿泉水
public Water() {
}
public Water(String name, int capacity) {
super(name, capacity);
}
@Override
public void show() {
System.out.println("名称:"+getName());
System.out.println("容量:"+getCapacity());
}
}
class Calendar extends Beverage{ //父类的第三个类 可乐
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Calendar() {
}
public Calendar(String name, int capacity,String type) {
super(name, capacity);
this.type = type;
}
@Override
public void show() {
System.out.println("名称:"+getName());
System.out.println("种类:"+getType());
System.out.println("容量:"+getCapacity());
}
}
public class HomeWork2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要买的饮料:1、咖啡 2、矿泉水 3、可乐");
int i = sc.nextInt();
if(i == 1){
Beverage beverage1 = new Coffee();
beverage1.setName("咖啡");
System.out.println("请输入购买容量: ");
int capacity1 = sc.nextInt();
beverage1.setCapacity(capacity1);
System.out.println("请输入想要的配料:1.加糖、2.加奶、3.什么都不加");
int j = sc.nextInt();
if(j==1){
((Coffee)beverage1).setMixture("加糖");
} else if (j == 2) {
((Coffee)beverage1).setMixture("加奶");
}else {
((Coffee)beverage1).setMixture("什么都不加");
}
System.out.println("你购买的信息如下");
beverage1.show();
} else if (i == 2) {
Beverage beverage2 = new Water();
beverage2.setName("矿泉水");
System.out.println("请输入购买容量: ");
int capacity2 = sc.nextInt();
beverage2.setCapacity(capacity2);
System.out.println("你购买的信息如下");
beverage2.show();
} else if (i == 3) {
Beverage beverage3 = new Calendar();
beverage3.setName("可乐");
System.out.println("请输入你要买的可乐:1.可口可乐,2.百事可乐");
int j = sc.nextInt();
if(j == 1){
((Calendar)beverage3).setName("可口可乐"); //多态的向下转型
beverage3.setName("可乐");
System.out.println("请输入购买容量: ");
int capacity2 = sc.nextInt();
beverage3.setCapacity(capacity2);
((Calendar) beverage3).setType("可口可乐");
System.out.println("你购买的信息如下");
beverage3.show();
} else if (j == 2) {
((Calendar)beverage3).setName("百事可乐");
beverage3.setName("可乐");
System.out.println("请输入购买容量: ");
int capacity2 = sc.nextInt();
beverage3.setCapacity(capacity2);
((Calendar) beverage3).setType("百事可乐");
System.out.println("你购买的信息如下");
beverage3.show();
}else {
System.out.println("没有其他种类,在考虑一下吧");
}
}else {
System.out.println("抱一丝,这里没有你想要的");
}
}
}
2.购买比萨
2. 编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作 的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
实现思路及关键代码
1) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义测试类,根据输入信息产生具体的比萨对象 程序运行结果如图所示
代码如下(示例):
import java.util.Scanner;
class Pizza{
public Pizza() {
}
public Pizza(String name, int price, int size) {
this.name = name;
this.price = price;
this.size = size;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
private String name;
private int price;
private int size;
public void show(){
System.out.println("名称:"+name);
System.out.println("价格:"+price+"元");
System.out.println("大小:"+size+"寸");
}
}
class BaconPizza extends Pizza{
private int bacon;
public BaconPizza() {
}
public BaconPizza(int bacon,String name, int price, int size) {
super(name, price, size);
this.bacon = bacon;
}
public int getBacon() {
return bacon;
}
public void setBacon(int bacon) {
this.bacon = bacon;
}
@Override
public void show() {
super.show();
System.out.println("培根克数:" + bacon);
}
}
class SeafoodPizza extends Pizza{
private String dosing;
public SeafoodPizza() {
}
public SeafoodPizza(String dosing) {
this.dosing = dosing;
}
public SeafoodPizza( String dosing,String name, int price, int size) {
super(name, price, size);
this.dosing = dosing;
}
public String getDosing() {
return dosing;
}
public void setDosing(String dosing) {
this.dosing = dosing;
}
@Override
public void show() {
super.show();
System.out.println("配料:"+dosing);
}
}
class PizzaPlant{
public Pizza method(int result){
Scanner sc = new Scanner(System.in);
Pizza p = new Pizza();
if(result == 1){
System.out.println("请输入培根克数:");
int bacon = sc.nextInt();
System.out.println("请输入比萨大小:");
int size = sc.nextInt();
System.out.println("亲输入比萨价格:");
int price = sc.nextInt();
p = new BaconPizza(bacon,"培根比萨",price,size);
p.show();
}else if(result ==2) {
System.out.println("请输入配料信息:");
String dosing = sc.next();
System.out.println("请输入比萨大小:");
int size = sc.nextInt();
System.out.println("亲输入比萨价格:");
int price = sc.nextInt();
p = new SeafoodPizza(dosing,"海鲜披萨",price,size);
p.show();
}
else {
System.out.println("没有其他种类了,请在两种方式里选择一个吧");
}
return p;
}
}
public class HomeWork {
public static void main(String[] args) {
System.out.print("请选择想要制作的披萨(1.培根披萨 2.海鲜披萨):");
int num = new Scanner(System.in).nextInt();
PizzaPlant pizzaPlant = new PizzaPlant();
pizzaPlant.method(num);
}
}
总结
多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一消息做出不同的响应。以下是多态的几个好处:
-
提高代码的可扩展性:多态使得代码可以随时添加新的实现,而不影响系统的其他部分。这样,一个系统可以随着需求的变化而不断改变。
-
提高代码的可维护性:因为多态允许不同类型的对象使用相同的接口,这使得代码更易于理解和修改。如果我们想要改变一个方法的行为,只需要改变它的实现即可,而不需要修改其他相关的代码。
-
简化代码:多态可以将代码中的条件语句减少到最少。这样,代码会更简洁,并且更容易维护和测试。
-
提高代码的可读性:多态使得代码更容易理解,因为每个对象都有自己的行为特征,并且这些特征都是通过相同的接口来实现的。因此,多态可以提高代码的可读性和可理解性。
总之,多态是一种灵活、可扩展、易维护的编程方式。