13.Java中的抽象类

1.什么是抽象类
    类---通过class关键字创建的java元素
    抽象类---通过abstract class创建的java元素
    判断一个java类是否是一个抽象类,看它是否使用abstract修饰

2.为什么要有抽象类
    为了减少代码的重复编写,提供代码的重用性。
    例如:坐车收费----公交车收费【全程1元】
                             ----出租车收费【每公里1元】
    公交车 extends 汽车[收费功能]
    出租车 extends 汽车[收费功能]
    汽车提供了收费功能,但是没有具体的收费标准,具体的收费标准是由公交车/出租车根据自身的实际情况决定收费标准。
    我们可以认为汽车是一个抽象类,它只提供功能,不给具体实现;
    公交车/出租车都是汽车这个抽象类的子类,公交车/出租车就会从汽车的抽象类上继承功能,根据自身的实际情况实现这个功能。
    抽象类为同一种类的事物提供功能,让它的子类根据自身的实际情况实现这个功能。

3.抽象类中可以有哪些元素
    类---实例变量,静态成员变量,构造方法,实例方法,静态方法
    抽象类---实例变量,静态成员变量,构造方法,实例方法,静态方法,抽象方法
    抽象方法---1.使用abstract关键字修饰
                      2.没有方法体“{}”
 

package zx.javatest.a;
//抽象类--通过abstract class创建的java元素
//关键字-abstract-创建
public abstract class Test1 {
	//抽象类中全是是静态实例变量
	public String num1 = "实例变量";
	
	public static String num2= "静态变量";
	
	public Test1 (){
		System.out.println("抽象类中的构造方法");
	}
	public void Test2 (){
		System.out.println("抽象类中的实例方法");
	}
	public static void Test3(){
		System.out.println("抽象类中的静态方法");
	}
	
	//抽象方法
	//关键字--abstract
	//抽象方法没有方法体
	public abstract void Test4();
	
}

4.抽象类的具体用法
     1.抽象类不能通过new+构造方法的形式创建对象的
     2.抽象类中可以有抽象方法,可以一个抽象方法都没有
     3.当一个普通的java类继承一个抽象类,就需要实现抽象类提供的所有抽象方法
        也可以将这个普通的java类改成抽象类
     4.抽象类可以继承抽象类
     5.当某一个普通的java类中的方法参数是抽象类类型的时候,可以传递上转型对象,也可以是            抽象类的子类对象。


5.卖水果实例 

package zx.javatest.b;
//水果的抽象类
public abstract class ShuiGuo {
	//抽象方法
	public abstract void chi();
}
package zx.javatest.b;

public class ShuiGuoDian {
		public static ShuiGuo  maishuiguo(String name){
			ShuiGuo  sg=null;
			if(name.equals("西瓜")){
				sg = new XiGua();
			}
			if(name.equals("苹果")){
				sg = new PingGuo();
			}
			if(name.equals("桃子")){
				sg = new TaoZi();
			}
			if(name.equals("菠萝")){
				sg = new BoLuo();
			}
			return sg;
		}
}
package zx.javatest.b;
//水果---西瓜
public class XiGua extends ShuiGuo{

	@Override
	public void chi() {
		System.out.println("用刀切开吃西瓜");
	}

}
package zx.javatest.b;

public class Testm {
	//主方法
	public static void main(String args[]){
//		ShuiGuo sg = ShuiGuoDian.maishuiguo("西瓜");
//		sg.chi();
		
		ShuiGuo sg = ShuiGuoDian.maishuiguo("菠萝");
//		sg.chi();
		if(sg!=null){
			sg.chi();
		}else{
			System.out.println("没有想吃的水果");
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值