多态,final,抽象类

多态

多态的必要条件:要有继承,要有方法重写,父类引用指向子类对象

父亲出面接到工作,具体有他孩子去做这件事。
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;
		}
	}
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值