Java 抽象类


抽象类不能实例化对象,抽象类只有被继承才能够继续使用。抽象类的其他功能都和普通类一样。抽象类可以定义普通方法也可以定义抽象方法。

一、抽象类存在的意义

一直以来我都感觉和普通类相比,抽象类没啥区别,那么为啥要使用抽象类呢。我感觉因该是比普通类多了一层约束,比如我在抽象类定义了抽象方法,那么此方法在子类中必须实现,这样就可以更方便的实现我们预定需要实现的一些功能。(防止忘记实现)
但是当我们要和接口比较的时候,那么抽象类就大有作为了。接口里的方法是完全抽象的,如果一个类继承接口,那么他必须完全实现这个接口里的方法。但是抽象类不同,它既有抽象方法也有普通方法。当需要在抽象类在添加一个方法时,那么可以添加普通方法,就不需要对子类做出改变。但是接口的话,如果做出修改,那么继承接口的子类也就必须要修改。抽象方法可以继承一个类和实现多个接口,但是接口只可以继承一个或多个接口。但是如果想实现多重继承,就必须使用接口。

二、抽象类代码实现

Java 中用 abstract class 来定义抽象类
还是废话少说,直接上一波代码

abstract class Animal{
	public String name;
	public int age;
	public String color;
	public Animal() {
		
	}
	public Animal(String name,int age,String color) {
		this.name=name;
		this.age=age;
		this.color=color;
	}
	public void eat() {
		System.out.println("动物要吃饭");
	}
	public void play() {
		System.out.println("动物要打游戏");
	}
}

可以看出与普通类的实现没啥区别,但是不能去用它实例化一个对象,否则会报错。例如:
Animal dog=new Animal();就会报:
Cannot instantiate the type Animal

三、继承抽象类

我们不能实例化一个抽象类的对象,但是我们可以通过实例化他子类(非抽象类)对象,该对象将继承抽象类的成员方法,并且获取他的成员变量。

还是先看代码

abstract class Animal {
	public String name;
	public int age;
	public String color;

	public Animal() {

	}

	public Animal(String name, int age, String color) {
		this.name = name;
		this.age = age;
		this.color = color;
	}

	public void eat() {
		System.out.println("动物要吃饭");
	}

	public void play() {
		System.out.println("动物要打游戏");
	}

	public void show1() {
		System.out.println("我是一只" + color + "的" + name);
	}
}

class Dog extends Animal {
	String home;

	public Dog() {

	}

	public Dog(String name, int age, String color, String home) {
		super(name, age, color);
		this.home = home;
	}

	public void show() {
		System.out.println("我是" + home + "家的" + "一只" + color + "的" + name);
	}
}

public class Test1 {
	public static void main(String[] args) {
		Animal horse = new Dog("马", 2, "棕色", "小明");
		Dog dog = new Dog("哈士奇", 1, "黑白色", "盟盟");
		horse.show1();
		dog.show();
	}
}

运行结果如下:
我是一只棕色的马
我是盟盟家的一只黑白色的哈士奇

四、抽象方法

抽象方法:抽象类中特别的成员方法,在抽象类中声明,但是具体实现必须在他的子类中。用 abstract 关键字来声明,只包含一个方法名,没有方法体。
但是用static 修饰的方法不能声明为抽象方法

如下就是声明抽象方法的代码:

abstract class Animal {
	public String name;
	public int age;
	public String color;

    public abstract int month();
}

抽象方法只在抽象类中实现,子类必须重写父类的抽象方法或者声明自身为抽象类。
如果 Dog 继承了 Animal 类,那么他必须重写 month 方法:

class Dog{
    public int month(){
        System.out.println("狗狗8个月大了");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cw旧巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值