多态
多态的必要条件:要有继承,要有方法重写,父类引用指向子类对象
父亲出面接到工作,具体有他孩子去做这件事。Object 对象类 他是所有java类的父类(根基类)
如果一个类没有继承任何类,这个类就继承了Object类
向上转型:子类转成父类,(父类出面,而子类做事)
向下转型:父类再转成原有的子类。(强制,注意类型转换异常)
super 代表父类本身 this 代表当前对象本身
== 和equals的区别
== 可以用来进行基本数据类型值的比较 int i =1;int j=1; i==j;// true
引用数据类型==比较的是内存地址是否相等。
Person p1 = new Person();
Person p2 = new Person();
p1==p2; // false
equals 用来比较两个对象的内容是否相等;
String s1 = "abc";
String s2 = "abc";
s1.equals(s2);// true
A instanceof B 用来判断A对象和B对象是否是同一种类型 是返回true 否则返回false
final
final 最终的,最后的,不变的
修饰属性:修饰一个变量,这个变量就变成了常量。
修饰方法:方法不能被子类重写。
修饰类:这个类不能被继承。
抽象类
抽象类:提供一种模版,提供抽象方法,抽象方法子类必须重写。保证子类的方法一致性,很好的实现多态。abstract :修饰类 类是变成抽象类。
修饰方法:方法变成抽象方法,抽象方法的意义是为了让子类重写,没有方法体;
抽象类的定义:一个被abstract修饰的类就是抽象类。
包含一个抽象方法的类是抽象类。(抽象类不一定会有抽象方法)
static final 修饰一个变量,变成全局常量
abstract 抽象的
final 最终的
题
编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。
实现思路及关键代码
1) 分析培根比萨和海鲜比萨
2) 定义比萨类
3) 属性:名称、价格、大小
4) 方法:展示
5) 定义培根比萨和海鲜比萨继承自比萨类
6) 定义比萨工厂类,根据输入信息产生具体的比萨对象
package com.pizza;
/**
* 披萨类
*
* @author Administrator
*
*/
public abstract class Pizza {
String name;
double price;
double size;
public abstract void info();
// 定义一个工厂类
public static Pizza getInstance(int i) {
if (i == 1) {
return new Pergen();
} else if (i == 2) {
return new Seafood();
}
return null;
}
}
package com.pizza;
/**
* 培根
* @author Administrator
*
*/
public class Pergen extends Pizza{
@Override
public void info() {
System.out.println("我是培根");
}
}
package com.pizza;
/**
* 海鲜
*
* @author Administrator
*
*/
public class Seafood extends Pizza {
@Override
public void info() {
System.out.println("我是海鲜");
}
}
package com.pizza;
public class Test {
public static void main(String[] args) {
Pizza p1 = Pizza.getInstance(1);
Pizza p2 = Pizza.getInstance(2);
p1.info();
p2.info();
}
}
编写程序实现软料购买:编写程序,接收用户输入的信息,选择购买的饮料。可供选择的饮料有:咖啡、矿泉水和可乐。其中,购买咖啡时可以选择:加糖、加奶还是什么都不加。购买可乐时可以选择:买可口可乐还是百事可乐。
package com.drink;
/**
* 饮料类
*
* @author Administrator
*
*/
public abstract class Drink {
String name;
String volume;
public abstract void info();
}
package com.drink;
/**
* 咖啡
* @author Administrator
*
*/
public class Coffee extends Drink{
private String pl;
@Override
public void info() {
System.out.println("名称:"+name);
System.out.println("配料:"+pl);
System.out.println("容量:"+volume);
}
public String getPl() {
return pl;
}
public void setPl(String pl) {
this.pl = pl;
}
}
package com.drink;
/**
* 水类
* @author Administrator
*
*/
public class Water extends Drink{
@Override
public void info() {
System.out.println("名称:"+name);
System.out.println("容量:"+volume);
}
}
package com.drink;
/**
* 可乐
*
* @author Administrator
*
*/
public class Cola extends Drink {
private String pp;
@Override
public void info() {
System.out.println("名称:"+name);
System.out.println("品牌:"+pp);
System.out.println("容量:"+volume);
}
public String getPp() {
return pp;
}
public void setPp(String pp) {
this.pp = pp;
}
}
package com.drink;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请选择:1.咖啡,2.矿泉水,3.可乐");
switch (sc.nextInt()) {
case 1:
System.out.println("请输入购买的容量:");
Coffee c = new Coffee();
c.volume = sc.next();
c.name = "咖啡";
System.out.println("请选择配料:1.加糖,2.加奶,3.什么都不加");
switch (sc.nextInt()) {
case 1:
c.setPl("加糖");
break;
case 2:
c.setPl("加奶");
break;
case 3:
c.setPl("什么都不加");
break;
}
c.info();
break;
case 2:
System.out.println("请输入购买的容量:");
Water w = new Water();
w.volume = sc.next();
w.name = "矿泉水";
w.info();
break;
case 3:
System.out.println("请输入购买的容量:");
Cola co = new Cola();
co.volume = sc.next();
co.name = "可乐";
System.out.println("请选择品牌:1.可口可乐,2.百事可乐");
switch (sc.nextInt()) {
case 1:
co.setPp("可口可乐");
break;
case 2:
co.setPp("百事可乐");
break;
}
co.info();
break;
}
}
}