继承
1.含义:
继承是一种由已有的类创建新类的机制。由继承而得到的类称为子类或派生类,被继承的类称为父类、基类、或超类。JAVA不支持多重继承,子类只能有一个父类。
可以先创建一个共有属性的一般类,根据一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。
2.继承的使用:
格式:public class 子类extends 父类{ }
继承的关键字是extends.
我们可以把公共属性和行为提取出来放在父类,由子类扩充父类来实现更多的特性,这样就节约了很多代码,程序变得更加简洁,而且容易扩充。
3.方法的覆盖与重载:
在父类中继承的方法在子类中重写的方法就做方法覆盖;
方法的重载就是具有相同函数名,返回类型可以不同,参数个数、顺序、类型不同的函数。
多态
同一个对象,调用不同类的实例,从而得到不同的结果。
Super关键字
Super关键字引用当前对象的直接父类中的属性和方法、广泛的运用于构造方法内。
Final关键字
Final 修饰类,这个类不能被继承;
Final 修饰方法,这个方法不能被重写;
Final 修饰一个属性,这个属性就不能被重新赋值;
Final 修饰一个变量,这个变量就变成了常量;
Final 修饰一个对象就不能引用其他的对象。
实例:买披萨问题
package cn.zbw;
import java.util.Scanner;
public class Pizza {
private int size;
private int price;
private String name;
//get set方法
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Pizza() { //无参构造
super();
}
public Pizza(int size, int price, String name) { //有参构造
super();
this.size = size;
this.price = price;
this.name = name;
}
public String show(){
return "这是制作披萨的方法!";
}
public static class Bacon_Pizza extends Pizza {
public Bacon_Pizza() { //无参构造
super();
}
//有参构造
public Bacon_Pizza(int size, int price, String name) {
super(size, price, name);
}
//重写shou方法
public String show(){
return "名称:"+super.getName()+"\n价格:"+super.getPrice()+"元"+"\n大小:"+super.getSize()+"寸";
}
}
public static class Seafood_Pizza extends Pizza {
public Seafood_Pizza() {//无参构造
super();
}
//有参构造
public Seafood_Pizza(int size, int price, String name) {
super(size, price, name);
}
//重写show方法
public String show(){
return "名称:"+super.getName()+"\n价格:"+super.getPrice()+"元"+"\n大小:"+super.getSize()+"寸";
}
}
public static class PizzaStore extends Pizza{ //披萨工厂类-->主要是生产披萨
public static Pizza getPizza(int order) { //得到披萨的方法
Scanner input = new Scanner(System.in);
Pizza p = null; //赋初始值
if (order == 1) {
System.out.println("请输入披萨大小:");
int size = input.nextInt();
System.out.println("请输入披萨价格:");
int price = input.nextInt();
// 根据上面录入的信息,创建具体的培根披萨:--创建对象:
p = new Bacon_Pizza(size, price, "培根披萨");
}
if (order == 2) { // 海鲜披萨
System.out.println("请输入披萨大小:");
int size = input.nextInt();
System.out.println("请输入披萨价格:");
int price = input.nextInt();
// 根据上面录入的信息,创建具体的培根披萨:--创建对象:
p = new Seafood_Pizza(size,price,"海鲜披萨");
}
return p; //最终根据需求生产具体披萨后,并返回
}
}
public static void main(String[] args) {
//具体的逻辑:---买披萨:
Scanner input = new Scanner(System.in);
System.out.println("请输选择要制作的披萨:1.培根披萨 2.海鲜披萨");
int num = input.nextInt();
Pizza p=PizzaStore.getPizza(num);
System.out.println(p.show());
}
}