抽象类与抽象方法

抽象类与抽象方法

在java中,抽象类不能产生对象实例。定义抽象时,需要使用abstract关键字,语法:

[权限修饰符] abstract class 类名 {
    类体
}

使用abstract定义的类被称为抽象类,使用abstract定义的方法被称为抽象方法,语法:

[权限修饰符] abstract 方法返回值类型 方法名(参数列表);

实例:使用抽象类模拟“去商场买衣服”场景
定义Market类

public abstract class Market {
	public String name; // 商场名称
	public String goods; // 商品名称

	public abstract void shop(); // 抽象方法,用来输出信息
}

定义TaobaoMarket类

public class TaobaoMarket extends Market {
	public void shop() {
		System.out.println(name + "网购" + goods);
	}
}

定义WallMarket类

public class WallMarket extends Market {
	public void shop() {
		System.out.println(name + "实体店购买" + goods);
	}
}

定义GoShopping类

public class GoShopping {
	public static void main(String[] args) {
		Market market = new WallMarket(); // 使用派生类对象创建抽象类对象
		market.name = "沃尔玛";
		market.goods = "七匹狼西服";
		market.shop();
		market = new TaobaoMarket(); // 使用派生类对象创建抽象类对象
		market.name = "淘宝";
		market.goods = "韩都衣舍花裙";
		market.shop();
	}
}

运行结果如下:

沃尔玛实体店购买七匹狼西服
淘宝网购韩都衣舍花裙

Process finished with exit code 0

父类对象new子类对象

Animal b = new Dog();

如上,对象b调用属性的时候调用父类属性,将对象b调用方法的时候调用子类的方法。

class Animal{
}
class Dog extends Animal{
}
public class Test4 {

	public static void main(String[] args) {
		Animal a = new Animal();
		Animal b = new Dog();
		System.out.println(a instanceof Animal);
		System.out.println(a.getClass());
		System.out.println(b.getClass());
		//先用的子类的方法所以调用的是子类的getClass
		System.out.println(a.getClass() .equals(b.getClass()));
		
	}
}

运行结果图

Dog b = new Dog();
Animal b = new Dog();

结果一样的,但是有区别的,看看使用抽象类模拟“去商场买衣服”场景,如果将Market market = new WallMarket();改成WallMarket market = new WallMarket();,编译器会报错,记住:此父类有两个子类。


再举个例子
定义一个demo1类:

package Demo;

public class demo1 {
    public static void main(String[] args) {
        Teacher Li = new English();
        Teacher Yang = new Math();
        Li.teaching();
        Yang.teaching();
    }
}

定义一个Teacher类

package Demo;

public abstract class Teacher{  //抽象类
    abstract public void teaching();    //抽象方法
}
class Math extends Teacher{
    @Override
    public void teaching() {
        System.out.println("我们讲三角函数!");
    }
}
class English extends Teacher{
    @Override
    public void teaching() {
        System.out.println("Good morning class!");
    }
}

运行结果如下:

Good morning class!
我们讲三角函数!

Process finished with exit code 0

注意:抽象类是不能实例化的!

Teacher Li = new Teacher(); //错误的写法!

运行结果图

报错的结果如下

java: Demo.Teacher是抽象的; 无法实例化

知道抽象类有什么用的!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值