java中抽象类 接口_java中的抽象类与接口
1.抽象類的定義
在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
2.簡單實例
Shape類
package 抽象類;
/*
題目:
建立一個Shape抽象類,代表形狀,求面積和周長兩個方法
建立一個正方形類, 長方形 ,圓類 作為抽象類的子類,
通過抽象類來求面積和周長
*/
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) {
//求正方形的面積和周長
Square square = new Square(3);
double area = square.getArea();
double zc = square.getPan();
System.out.println("正方形的面積:"+area);
System.out.println("正方形的周長:"+zc);
}
}
3.總結:
1. 抽象類不能被實例化
2. 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
3. 抽象類中的抽象方法只是聲明,不包含方法體。
4. 構造方法,類方法(用 static 修飾的方法)不能聲明為抽象方法。
5. 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。
4.接口的概念
接口是只有全局常量和公共抽象方法的一種特殊類,由于在java中只能使用單繼承的方式,所以增加接口類型,可以讓類實現多個接口。
彌補單繼承機制的不足。在接口中所有的常量都默認修飾public static final,所有的方法默認修飾public abstract(JDK1.8之前)。
補充:JDK1.8中對接口增加的特性:
(1)、默認方法(default method):JDK 1.8允許給接口添加非抽象的方法實現,但必須使用default關鍵字修飾;定義了default的方法可以不被實現子類所實現,但只能被實現子類的對象調用;如果子類實現了多個接口,并且這些接口包含一樣的默認方法,則子類必須重寫默認方法;
(2)、靜態方法(static method):JDK 1.8中允許使用static關鍵字修飾一個方法,并提供實現,稱為接口靜態方法。接口靜態方法只能通過接口調用(接口名.靜態方法名)。
5.接口與抽象類的異同
相同點:(1)接口與抽象類都不能直接實例化.
不同點:(1)接口中的方法全部是抽象方法,抽象類中的方法不全是。
(2)一個類可以實現多個接口,但是一個子類只能繼承一個父類。
(3)接口中的成員權限都是public,抽象類中不一定。
(4)接口強調特定功能的實現,而抽象類強調所屬關系。
(5)接口成員變量默認為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。
(6)接口是對行為的抽象,抽象類是對一類事物的抽象。
6.簡單示例
AnimalAction接口,代表動物行為
package 接口實例;
public interface AnimalAction {
//吃
void eat();
//public void eat();
//喝
void drink();
}
AnimalLove接口,代表動物的求偶方式
package 接口實例;
public interface AnimalLove {
//求偶方式
void LoveType();
}
AnimalSleep接口,代表動物的作息方式
package 接口實例;
public interface AnimalSleep {
//作息方式
String sleep();
}
Bird類
package 接口實例;
public class Bird implements AnimalAction,AnimalLove,AnimalSleep{
@Override
public String sleep() {
String string="我是鳥,白天覓食,晚上睡覺";
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 接口實例;
public class Cat implements AnimalAction,AnimalSleep,AnimalLove{
@Override
public void LoveType() {
System.out.println("我是貓,求偶方式是抓老鼠");
}
@Override
public String sleep() {
String string="我是貓,白天睡覺,晚上活動";
return string;
}
@Override
public void eat() {
System.out.println("我是貓,喜歡吃魚");
}
@Override
public void drink() {
System.out.println("我是貓,喝水很斯文");
}
}
View Code
Test類,用于測試
package 接口實例;
public class Test {
//可以用接口創建的引用作為方法的形參
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) {
//向上轉型,自動的
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();
//向下轉型,強制轉換的
Bird xBird = (Bird)action;
xBird.LoveType();
System.out.println(xBird.sleep());
}
}
運行結果:
參考文章:
標簽:java,double,void,接口,action,抽象類,public
來源: https://www.cnblogs.com/YorkZhangYang/p/12741692.html
總結
以上是生活随笔為你收集整理的java中抽象类 接口_java中的抽象类与接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么java单精度要f_为什么快速反平
- 下一篇: java io流读写文件换行_java基