java的抽象類代碼講解(抽象類 java)

本文目錄一覽:

java中抽象類,抽象方法,抽象類是什麼意思!實例解說一下! 本人是個剛學習者!

含有抽象方法的類就只能是抽象類

抽象類結構:absract class 類名{  }

抽象方法結構:(public) absract void 方法名();

抽象類只能用來繼承,抽象方法必須被重寫

抽象類不能實例化,也就是不能用new調用

抽象類可以有:抽象類、普通屬性和方法、構造方法(不能用new實例,只能用來被子類調用)

public abstract class Human {//抽象父類

private final int time=++count;//對象計數器

private static int count;//靜態池

//屬性封裝

private String name;//封裝三步:隱藏屬性,提供getter與setter方法,構造中調用setter初始化

private int age;

private String sex;

//gettersetter

public String getName(){

return this.name;

}

public void setName(String name){

//處理代碼:姓名不能為空,且不能包含數字

if(name.length()==0){

System.out.println(“姓名不能為空”);

}

else if(this.isWrongName(name)){//調用私有方法處理

System.out.println(“非法姓名,不能包含數字”);

}

else{

this.name=name;

}

}

private boolean isWrongName(String name){//判斷非法姓名輸入(私有)

char[] ch=name.toCharArray();

for(int i=0;ich.length;i++){

try{

int s=Integer.parseInt(String.valueOf(ch[i]));

s++;//廢

return true;

}

catch(Exception e){

continue;//出錯就繼續下一次循環轉換

}

}

return false;//先返回錯誤

}

public int getAge(){

return this.age;

}

public void setAge(int age){

if(age=0){

System.out.println(“年齡有誤”);

}

else{

this.age=age;

}

}

public String getSex(){

return this.sex;

}

public void setSex(String sex){

if(sex.length()1||sex.length()==0){

System.out.println(“性別設定錯誤”);

}

else if(sex.toCharArray()[0]==’男’||sex.toCharArray()[0]==’女’){

this.sex=sex;

}

else{

System.out.println(“性別設定錯誤”);

}

}

//構造

public Human(){//無參

this(“無1名氏”,25,”男”);

}

public Human(String name,int age,String sex){//全參

this.setName(name);

this.setAge(age);

this.setSex(sex);

}

//抽象方法

public abstract void speak();//說話

public abstract void work();//工作

public abstract void eat();

//獲取對象創建數目

public int getHumanClassUseTimes(){

return this.time;

}

}

java 的抽象類解釋

這是一種面向接口的編程,就是父類的引用指向了子類對象。

打個比方一個抽象類:動物,一個子類:狗

狗繼承了類 動物

動物 dongwu = new 狗();

new出來狗的對象的引用(指向)了dongwu,通過dongwu來訪問狗增加了程序的通用性和靈活性,是一種充分體現了面向對象編程的多態性。

運行的時候可以統一調用dongwu的方法,來動態實現狗的特性。

動物也可以指向貓:例如:

動物 dongwu = new 貓();

如果有個方法 動物 叫

則可以統一用dongwu.叫() 在運行時動態的選擇調用哪個對象,

你傳的是new 貓() 則調用貓叫方法,

如果是new 狗() 則調用狗叫方法

以後你會經常碰到這種寫法。 抽象類,或者接口都可以這樣:

接口(抽象類)一個引用的名字 = new 實現了接口(或繼承了抽象類)的名字();

java中什麼是抽象類

由abstract修飾的方法叫抽象方法;由abstract修飾的類叫抽象類。抽象的類無法進行實例化,因為他不是具體存在的類,或者說這樣的類還不夠完善,不能直接使用new關鍵字調用其構造器生成該類的對象。我們可以使用abstract定義一個抽象類和抽象方法,示例代碼如下:

abstract class 類名

{

abstract int 方法名(int x,int y);

}

抽象的方法沒有方法體。需要注意的是在抽象類中既可以有抽象方法,也可以有普通方法,注意抽象方法是沒有方法體的(也就是方法後面是沒有大括號的)。凡是繼承這個抽象類的實體子類,都必須要實現這個抽象方法。

我們總結一下抽象類的特點:

(1)抽象類不能被實例化

(2)構造方法 和 static 方法不能是抽象的

(3)父類的抽象方法往往在子類中實現

(4)抽象類可以具有指向子類對象的對象引用

java程序,抽象類實現,求具體代碼

package test;

/**

*

* @author JinnL

*父類抽象類

*/

public abstract class Car {

//轉彎

abstract void turn();

//啟動

abstract void start();

void what(){

System.out.println(“this is “+this.getClass().getSimpleName());

}

public static void main(String[] args) {

/**

* 方法入口

*/

Car[] cars ={new Bicycle(),new Automobile(),new GasAutomobile(),new DieselAutomobile()};

for (Car car : cars) {

car.start();

}

}

}

class Bicycle extends Car{

@Override

void turn() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

@Override

void start() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

void what(){

}

}

class Automobile extends Car{

@Override

void turn() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

@Override

void start() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

}

class GasAutomobile extends Automobile{

//重寫start turn

@Override

void turn() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

@Override

void start() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

}

class DieselAutomobile extends Automobile{

@Override

void start() {

System.out.println(“this is “+this.getClass().getSimpleName());

}

void what(){

System.out.println(“this is “+this.getClass().getSimpleName());

}

}

java編程抽象類技術如何實現?

java編程一直以來都是互聯網上使用比較廣泛的一種編程語言,所以我們今天就一起來了解一下java編程中的抽象類是如何來實現的,希望通過對本文的閱讀,大家能夠對java編程技術有更深刻的認識,下面昆明電腦培訓就開始今天的主要內容吧。

AbstractMap抽象類實現了一些簡單且通用的方法,本身並不難。但在這個抽象類中有兩個方法非常值得關注,keySet和values方法源碼的實現可以說是教科書式的典範。

抽象類通常作為一種骨架實現,為各自子類實現公共的方法。上一篇我們講解了Map接口,此篇對AbstractMap抽象類進行剖析研究。

Java中Map類型的數據結構有相當多,AbstractMap作為它們的骨架實現實現了Map接口部分方法,也就是說為它的子類各種Map提供了公共的方法,沒有實現的方法各種Map可能有所不同。

抽象類不能通過new關鍵字直接創建抽象類的實例,但它可以有構造方法。AbstractMap提供了一個protected修飾的無參構造方法,意味着只有它的子類才能訪問(當然它本身就是一個抽象類,其他類也不能直接對其實例化),也就是說只有它的子類才能調用這個無參的構造方法。

在Map接口中其內部定義了一個Entry接口,這個接口是Map映射的內部實現用於維護一個key-value鍵值對,key-value存儲在這個Map.Entry中。AbstractMap對這個內部接口進行了實現,一共有兩個:一個是可變的SimpleEntry和一個是不可變的SimpleImmutableEntry。

publicstaticclassSimpleEntryimplementsEntry,java.io.Serializable

實現了Map.Entry接口,並且實現了Serializable(可被序列化)。

它的方法比較簡單都是取值存值的操作,對於key值的定義是一個final修飾意味着是一個不可變的引用。另外其setValue方法稍微特殊,存入value值返回的並不是存入的值,而是返回的以前的舊值。需要重點學習的是它重寫的equals和hashCode方法。

publicstaticclassSimpleImmutableEntryimplementsEntry,java.io.SerializableSimpleImmutableEntry

定義為不可變的Entry,其實是事實不可變,因為它不提供setValue方法,在多個線程同時訪問時自然不能通過setValue方法進行修改。它相比於SimpleEntry其key和value成員變量都被定義為了final類型。調用setValue方法將會拋出UnsupportedOperationException異常。

它的equals和hashCode方法和SimpleEntry一致。

接下來查看AbstractMap抽象類實現了哪些Map接口中的方法。

publicintsize()

Map中定義了一個entrySet方法,返回的是Map.Entry的Set集合,直接調用Set集合的size方法即是Map的大小。

publicbooleanisEmpty()

調用上面的size方法,等於0即為空。

publicbooleancontainsKey(Objectkey)

這個方法的實現較為簡單,通過調用entrySet方法獲取Set集合的迭代器遍歷Map.Entry,與參數key比較。Map可以存儲為null的key值,由於key=null在Map中存儲比較特殊(不能計算hashCode值),所以在這裡也做了判斷參數key是否為空。

原創文章,作者:JCTPN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129260.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JCTPN的頭像JCTPN
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論