java抽象类与抽象方法_Java的抽象类与抽象方法(abstract class and abstract method)

为什么需要抽像Abstract

当多个类出现相同的功能,而只是功能的主体不同时,可以向上抽象。

所谓抽象就是,只抽取功能的定义,而不抽取功能的主体

抽象Abstract,简单理解就是:看不懂。

抽样类的特点:

抽象方法一定定义在抽象类中,但抽象类中的方法不必全是抽象的,也可以有非抽象的方法。

只要类中有一个方法是抽象的,这个类就是抽象的。

抽象方法和抽象类必须用abstract关键字修饰。

抽象类不可以new一个对象,因为抽象类中的方法没有方法体,new一个对象无实际意义。

抽象类中定义的方法要被使用,就要由子类去继承这个抽象类,并且子类要重写抽象类中的所有抽象方法。

如果子类只是重写了父类的部分抽象方法,那么这个子类仍然时抽象的。

为什么需要抽象的示例:

classCat {voidyell() {

System.out.println("Cat: meow meow meow...");

}

}classDog {voidyell() {

System.out.println("Dog: woof woof woof...");

}

}

上面两个类,小猫和小狗都有发出叫声的功能,为了能够抽象出阿猫阿狗的叫声,我们写了另一个Pet类

classPet {voidyell() {

System.out.println("pet yell...");

}

}

但这个类里面的方法还不够抽象,因为它的yell()方法时具体的。这时我把它的方法体去掉。

classPet {voidyell() {

}

}

一个方法后面可以跟大括号,里面什么也不写,方法也可以以分号结尾。进一步抽象这个方法,去掉大括号,加上分号。

classPet {

//当一个方法没有大括号包围起来的方法提示,我们就应该在方法的前面加上abstract这个关键字,来申明这个方法时一个抽象方法。

//实际,idea等ide这时会报错提示我们,要么给出方法体,要么什么它是abstract的。voidyell();

}

根据idea提示,给yell()的方法加上abstract关键字时,idea会自动给Pet类也加上abstract关键字。

这就是我们前面提到的:抽象方法存在与抽象类中;如果一个类中有抽象方法,这个类也必须是抽象的。

abstract classPet {abstract voidyell();

}

抽象类不可以new一个对象。下面我们试图在Demo类中new一个Pet类的对象,因为Pet是一个抽象类,intelliJ idea就会报错提示我们不可以这样做。

public classDemo {

Pet p=newPet();

}

完整的例子:

importorg.junit.Test;public classDemo {

@Testpublic voidtest() {

Cat c= newCat();

Dog d= newDog();

c.yell();//子类调用子类自己已经实现的yell()方法

d.yell();

}

}abstract classPet {public abstract voidyell();

}class Dog extendsPet {public voidyell() {

System.out.println("Dog: woof woof woof...");

}

}class Cat extendsPet {public voidyell() {

System.out.println("Cat: meow meow meow...");

}

}

运行结果

Cat: meow meow meow...

Dog: woof woof woof...

后记:

2020年3月1日 星期日 上海 阴有间断小雨 气温:10° 比较冷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值