抽象类必须要有抽象方法吗?
1.什么是抽象类?
类--通过class关键字创建的java元素
抽象类---通过abstract class创建的java元素
判断一个java类是否是一个抽象类,看它是否使用abstract修饰。
2.为什么要有抽象类?
为了减少代码的重复编写,提供代码的重用性。
例如:坐车收费----公交车收费【全程1元】
----出租车收费【每公里1元】
公交车 extends 汽车[收费功能]
出租车 extends 汽车[收费功能]
汽车提供了收费功能,但是没有具体的收费标准,具体的收费标准是由公交车/出租车根据自身的实际情况决定收费标准。
我们可以认为汽车是一个抽象类,它只提供功能,不给具体实现;
公交车/出租车都是汽车这个抽象类的子类,公交车/出租车就会从汽车的抽象类上继承功能,根据自身的实际情况实现这个功能。
抽象类为同一种类的事物提供功能,让它的子类根据自身的实际情况实现这个功能。
3.抽象类中可以有哪些元素?
类---实例变量,静态成员变量,构造方法,实例方法,静态方法
抽象类---实例变量,静态成员变量,构造方法,实例方法,静态方法,抽象方法
抽象方法---1.使用abstract关键字修饰
2.没有方法体“{}”
package com.wangxing.chouxiang1;
//抽象类--通过abstract class创建的java元素
public abstract class ChouXiangLei1 {
//实例变量
public String shili="实例变量";
//静态成员变量
public static String staticbianliang="静态成员变量";
//构造方法
public ChouXiangLei1(){
System.out.println("抽象类中的构造方法");
}
//实例方法
public void shiliMethod(){
System.out.println("抽象类中的实例方法");
}
//静态方法
public static void staticMethod(){
System.out.println("抽象类中的静态方法");
}
//抽象方法
//1.使用abstract关键字修饰
//2.2.没有方法体“{}”
public abstract void abstractMethod();
}
4.抽象类的具体用法
1.抽象类不能通过new+构造方法的形式创建对象的
2.抽象类中可以有抽象方法,可以一个抽象方法都没有
3.当一个普通的java类继承一个抽象类,就需要实现抽象类提供的所有抽象方法也可以将这个普通的java类改成抽象类
4.抽象类可以继承抽象类
5.当某一个普通的java类中的方法参数是抽象类类型的时候,可以传递上转型对象,也可以是抽象类的子类对象。
5.卖水果实例
package com.wangxing.test1;
//水果抽象类
public abstract class ShuiGuo {
//抽象方法
public abstract void chi();
}
package com.wangxing.test1;
//水果--西瓜
public class XiGua extends ShuiGuo{
@Override
public void chi() {
System.out.println("用刀切开吃西瓜");
}
}
package com.wangxing.test1;
//水果--苹果
public class PingGuo extends ShuiGuo{
@Override
public void chi() {
System.out.println("削皮以后吃苹果");
}
}
package com.wangxing.test1;
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();
}
return sg;
}
}
package com.wangxing.test1;
public class TestMain {
public static void main(String args[]){
ShuiGuo sg=ShuiGuoDian.maiShuiGuo("桃子");
if(sg!=null){
sg.chi();
}else{
System.out.println("没有买到想吃的水果");
}
}
}
总结:
抽象类就是使用abstract关键字修饰的java类。判断一个类是不是一个抽象类主要看class前面有没有abstract关键字,而不是看它有没有抽象方法。
抽象方法--1.abstract修饰
2.没有方法体
抽象类中可以有抽象方法,也可以一个抽象方法都没有。
普通的java类是不能有抽象方法的,能够包含抽象方法的java类一定是抽象类