java中抽象类 接口_java中的抽象类与接口
1.抽象類的定義
在面向?qū)ο蟮母拍钪?#xff0c;所有的對(duì)象都是通過(guò)類來(lái)描繪的,但是反過(guò)來(lái),并不是所有的類都是用來(lái)描繪對(duì)象的,如果一個(gè)類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類。
2.簡(jiǎn)單實(shí)例
Shape類
package 抽象類;
/*
題目:
建立一個(gè)Shape抽象類,代表形狀,求面積和周長(zhǎng)兩個(gè)方法
建立一個(gè)正方形類, 長(zhǎng)方形 ,圓類 作為抽象類的子類,
通過(guò)抽象類來(lái)求面積和周長(zhǎng)
*/
public abstract class Shape {
public abstract double getArea();//抽象方法
public abstract double getPan();
}
Square類
package 抽象類;
public class Square extends Shape{
protected double len;
Square(double len){
this.len = len;
}
public double getArea(){
return len*len;
}
public double getPan(){
return 4*len;
}
}
Circle類
public class Circle extends Shape{
private double r;
Circle (double r){
this.r = r;
}
public double getArea(){
return Math.PI*r*r;
}
public double getPan(){
return Math.PI*r*2;
}
}
Demo_Test2類
package 抽象類;
public class Demo_Test2 {
public static void main(String[] args) {
//求正方形的面積和周長(zhǎng)
Square square = new Square(3);
double area = square.getArea();
double zc = square.getPan();
System.out.println("正方形的面積:"+area);
System.out.println("正方形的周長(zhǎng):"+zc);
}
}
3.總結(jié):
1. 抽象類不能被實(shí)例化
2. 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
3. 抽象類中的抽象方法只是聲明,不包含方法體。
4. 構(gòu)造方法,類方法(用 static 修飾的方法)不能聲明為抽象方法。
5. 抽象類的子類必須給出抽象類中的抽象方法的具體實(shí)現(xiàn),除非該子類也是抽象類。
4.接口的概念
接口是只有全局常量和公共抽象方法的一種特殊類,由于在java中只能使用單繼承的方式,所以增加接口類型,可以讓類實(shí)現(xiàn)多個(gè)接口。
彌補(bǔ)單繼承機(jī)制的不足。在接口中所有的常量都默認(rèn)修飾public static final,所有的方法默認(rèn)修飾public abstract(JDK1.8之前)。
補(bǔ)充:JDK1.8中對(duì)接口增加的特性:
(1)、默認(rèn)方法(default method):JDK 1.8允許給接口添加非抽象的方法實(shí)現(xiàn),但必須使用default關(guān)鍵字修飾;定義了default的方法可以不被實(shí)現(xiàn)子類所實(shí)現(xiàn),但只能被實(shí)現(xiàn)子類的對(duì)象調(diào)用;如果子類實(shí)現(xiàn)了多個(gè)接口,并且這些接口包含一樣的默認(rèn)方法,則子類必須重寫默認(rèn)方法;
(2)、靜態(tài)方法(static method):JDK 1.8中允許使用static關(guān)鍵字修飾一個(gè)方法,并提供實(shí)現(xiàn),稱為接口靜態(tài)方法。接口靜態(tài)方法只能通過(guò)接口調(diào)用(接口名.靜態(tài)方法名)。
5.接口與抽象類的異同
相同點(diǎn):(1)接口與抽象類都不能直接實(shí)例化.
不同點(diǎn):(1)接口中的方法全部是抽象方法,抽象類中的方法不全是。
(2)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但是一個(gè)子類只能繼承一個(gè)父類。
(3)接口中的成員權(quán)限都是public,抽象類中不一定。
(4)接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而抽象類強(qiáng)調(diào)所屬關(guān)系。
(5)接口成員變量默認(rèn)為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認(rèn)default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號(hào)結(jié)尾,不帶花括號(hào)。
(6)接口是對(duì)行為的抽象,抽象類是對(duì)一類事物的抽象。
6.簡(jiǎn)單示例
AnimalAction接口,代表動(dòng)物行為
package 接口實(shí)例;
public interface AnimalAction {
//吃
void eat();
//public void eat();
//喝
void drink();
}
AnimalLove接口,代表動(dòng)物的求偶方式
package 接口實(shí)例;
public interface AnimalLove {
//求偶方式
void LoveType();
}
AnimalSleep接口,代表動(dòng)物的作息方式
package 接口實(shí)例;
public interface AnimalSleep {
//作息方式
String sleep();
}
Bird類
package 接口實(shí)例;
public class Bird implements AnimalAction,AnimalLove,AnimalSleep{
@Override
public String sleep() {
String string="我是鳥,白天覓食,晚上睡覺(jué)";
return string;
}
@Override
public void LoveType() {
System.out.println("我是鳥,求偶方式是修房子");
}
@Override
public void eat() {
System.out.println("我是鳥,喜歡吃蟲子");
}
@Override
public void drink() {
System.out.println("我是鳥,喝水啄著喝");
}
}
View Code
Cat類
package 接口實(shí)例;
public class Cat implements AnimalAction,AnimalSleep,AnimalLove{
@Override
public void LoveType() {
System.out.println("我是貓,求偶方式是抓老鼠");
}
@Override
public String sleep() {
String string="我是貓,白天睡覺(jué),晚上活動(dòng)";
return string;
}
@Override
public void eat() {
System.out.println("我是貓,喜歡吃魚");
}
@Override
public void drink() {
System.out.println("我是貓,喝水很斯文");
}
}
View Code
Test類,用于測(cè)試
package 接口實(shí)例;
public class Test {
//可以用接口創(chuàng)建的引用作為方法的形參
public void BuruAnimal(AnimalAction action)
{
if (action instanceof Cat) {
Cat cat1 = (Cat) action;
cat1.eat();
}
if (action instanceof Bird) {
Bird bird = (Bird)action;
bird.eat();
}
}
public static void main(String[] args) {
//向上轉(zhuǎn)型,自動(dòng)的
AnimalAction action = new Cat();
action.eat();
action.drink();
//The method sleep() is undefined for the type AnimalAction
//action.sleep();
action = new Bird();
action.eat();
action.drink();
//向下轉(zhuǎn)型,強(qiáng)制轉(zhuǎn)換的
Bird xBird = (Bird)action;
xBird.LoveType();
System.out.println(xBird.sleep());
}
}
運(yùn)行結(jié)果:
參考文章:
標(biāo)簽:java,double,void,接口,action,抽象類,public
來(lái)源: https://www.cnblogs.com/YorkZhangYang/p/12741692.html
總結(jié)
以上是生活随笔為你收集整理的java中抽象类 接口_java中的抽象类与接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么java单精度要f_为什么快速反平
- 下一篇: java io流读写文件换行_java基