欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java封裝繼承程序代碼 JAVA繼承代碼

java封裝繼承

一、封裝(encapsulation)

成都創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元從化做網(wǎng)站,已為上家服務(wù),為從化各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

封裝性就是把類(lèi)(對(duì)象)的屬性和行為結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽類(lèi)(對(duì)象)的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。封裝的特性使得類(lèi)(對(duì)象)以外的部分不能隨意存取類(lèi)(對(duì)象)的內(nèi)部數(shù)據(jù)(屬性),保證了程序和數(shù)據(jù)不受外部干擾且不被誤用。

這個(gè)怎么理解呢?首先來(lái)看一個(gè)列子。

已知一個(gè)類(lèi)Animal,該類(lèi)的屬性和方法如下表所示:

屬性

說(shuō)明

方法

說(shuō)明

String name

名稱

Animal()

無(wú)參構(gòu)造函數(shù),為屬性設(shè)置初始值

Int age

年齡

Animal(String name,int age)

有參構(gòu)造函數(shù),為屬性設(shè)置變量值

根據(jù)該類(lèi)的定義,編寫(xiě)一個(gè)程序,輸出該類(lèi)的初始值以及通過(guò)變量設(shè)置的初始值,程序代碼如下

public class AnimalDemo{

public static void main(Stringargs[]){

Animal a=new Animal();

Animal b=new Animal("cat",5);

System.out.println(a.name+"is "+a.age+" years old");

System.out.println(b.name+"is "+b.age+" years old");

}

}

程序執(zhí)行結(jié)果:

Dog is 3 years old

cat is 5 years old

由此可以知道,類(lèi)Animal的無(wú)參構(gòu)造函數(shù)為name屬性賦值為“Dog”,為age屬性賦值為“3”。因此,可以寫(xiě)出類(lèi)Animal的代碼如下:

class Animal {

String name;

int age;

Animal(){

name="Dog";

age=3;

}

Animal(Stringname,int age){

this.name=name;

this.age=age;

}

}

實(shí)際上這就是上一篇文章中的例子,那么封裝在這里的含義如下:

l 類(lèi)本身就實(shí)現(xiàn)了封裝功能,此處類(lèi)Animal定義了兩個(gè)屬性,兩個(gè)構(gòu)造函數(shù),其只屬于Animal類(lèi)。

l 通過(guò)訪問(wèn)修飾符來(lái)限制對(duì)類(lèi)的屬性和方法的訪問(wèn),各修飾符含義如下:

Private:成員變量和方法只能在類(lèi)內(nèi)被訪問(wèn),具有類(lèi)可見(jiàn)性

默認(rèn): 成員變量和方法只能被同一個(gè)包里的類(lèi)訪問(wèn),具有包可見(jiàn)性。

Protected:可以被同一個(gè)包中的類(lèi)訪問(wèn),被同一個(gè)項(xiàng)目中不同包中的子類(lèi)訪問(wèn)

Public:可以被同一個(gè)項(xiàng)目中所有的類(lèi)訪問(wèn),具有項(xiàng)目可見(jiàn)性,這是最大的訪問(wèn)權(quán)限

l 只能通過(guò)類(lèi)本身定義的方法來(lái)對(duì)該類(lèi)所實(shí)例化的對(duì)象進(jìn)行數(shù)據(jù)的訪問(wèn)和處理。比如想對(duì)實(shí)例化的對(duì)象添加其它的一個(gè)方法和屬性是不可能的。這就體現(xiàn)的類(lèi)的封裝性。這里也可以理解一下為什么類(lèi)被稱之為模板或者藍(lán)圖。

二、繼承

1、繼承是面向?qū)ο蟮娜筇卣髦唬彩菍?shí)現(xiàn)代碼復(fù)用的重要手段。Java的繼承具有單繼承的特點(diǎn),即只能繼承自一個(gè)父類(lèi),每個(gè)子類(lèi)只有一個(gè)直接父類(lèi),但是其父類(lèi)又可以繼承于另一個(gè)類(lèi),從而實(shí)現(xiàn)了子類(lèi)可以間接繼承多個(gè)父類(lèi),但其本質(zhì)上劃分仍然是一個(gè)父類(lèi)和子類(lèi)的關(guān)系。

2、Java的繼承通過(guò)extends關(guān)鍵字來(lái)實(shí)現(xiàn),實(shí)現(xiàn)繼承的類(lèi)被稱為子類(lèi),被繼承的類(lèi)稱為父類(lèi)(有的也稱其為基類(lèi)、超類(lèi)),父類(lèi)和子類(lèi)的關(guān)系,是一種一般和特殊的關(guān)系。就像是水果和蘋(píng)果的關(guān)系,蘋(píng)果繼承了水果,蘋(píng)果是水果的子類(lèi),水果是蘋(píng)果的父類(lèi),則蘋(píng)果是一種特殊的水果。

3、Java使用extends作為繼承的關(guān)鍵字,extends關(guān)鍵字在英文是擴(kuò)展的意思,而不是繼承。為什么國(guó)內(nèi)把extends翻譯成繼承呢?除了與歷史原因有關(guān)外,把extends翻譯成為繼承也是有其道理的:子類(lèi)擴(kuò)展父類(lèi),將可以獲得父類(lèi)的全部屬性和方法,這與漢語(yǔ)中得繼承(子輩從父輩那里獲得一筆財(cái)富成為繼承)具有很好的類(lèi)似性。

值得指出的是:Java的子類(lèi)不能獲得父類(lèi)的構(gòu)造器。

創(chuàng)建子類(lèi)一般形式如下:

class 類(lèi)名 extends 父類(lèi)名{

子類(lèi)體

}

4、子類(lèi)與父類(lèi)的變量、方法關(guān)系

子類(lèi)可以繼承父類(lèi)的所有特性,但其可見(jiàn)性,由父類(lèi)成員變量、方法的修飾符決定。對(duì)于被private修飾的類(lèi)成員變量或方法,其子類(lèi)是不可見(jiàn)的,也即不可訪問(wèn);對(duì)于定義為默認(rèn)訪問(wèn)(沒(méi)有修飾符修飾)的類(lèi)成員變量或方法,只有與父類(lèi)同處于一個(gè)包中的子類(lèi)可以訪問(wèn);對(duì)于定義為public或protected 的類(lèi)成員變量或方法,所有子類(lèi)都可以訪問(wèn)。

子類(lèi)中可以聲明與父類(lèi)同名的成員變量,這時(shí)父類(lèi)的成員變量就被隱藏起來(lái)了,在子類(lèi)中直接訪問(wèn)到的是子類(lèi)中定義的成員變量。

子類(lèi)中也可以聲明與父類(lèi)相同的成員方法,包括返回值類(lèi)型、方法名、形式參數(shù)都應(yīng)保持一致,稱為方法的覆蓋。

如果在子類(lèi)中需要訪問(wèn)父類(lèi)中定義的同名成員變量或方法,需要用的關(guān)鍵字super。Java中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)被隱藏或被覆蓋的父類(lèi)成員的訪問(wèn)。super 的使用有三種情況:

l 訪問(wèn)父類(lèi)被隱藏的成員變量和成員方法;

super.成員變量名;

l 調(diào)用父類(lèi)中被覆蓋的方法,如:

super.成員方法名([參數(shù)列]);

l 調(diào)用父類(lèi)的構(gòu)造函數(shù),如:

super([參數(shù)列表]);

super( )只能在子類(lèi)的構(gòu)造函數(shù)中出現(xiàn),并且永遠(yuǎn)都是位于子類(lèi)構(gòu)造函數(shù)中的第一條語(yǔ)句。

舉例:

class BaseClass{

public double weight;

public void info(){

System.out.println("我的體重是"+weight+"千克");

}

}

public class ExtendsDemo001 extends BaseClass{

public static void main(String[]args) {

//創(chuàng)建ExtendsDemo001對(duì)象

ExtendsDemo001 ed = new ExtendsDemo001();

//ExtendsDemo001本身沒(méi)有weight屬性,但是ExtendsDemo001的父類(lèi)有weight屬性,也可以訪問(wèn)ExtendsDemo001對(duì)象的屬性

ed.weight = 56;

//調(diào)用ExtendsDemo001對(duì)象的info()方法

ed.info();

}

}

舉例二:

class Animal {

String name="animal";

int age;

void move(){

System.out.println("animalmove");

}

}

classDog extends Animal{

String name="dog"; //隱藏了父類(lèi)的name屬性;

float weight; //子類(lèi)新增成員變量

void move(){ //覆蓋了父類(lèi)的方法move()

super.move(); //用super調(diào)用父類(lèi)的方法

System.out.println("Dog Move");

}

}

publicclass InheritDemo{

public static void main(String args[]){

Dog d=new Dog();

d.age=5;

d.weight=6;

System.out.println(d.name+" is"+d.age+" years old");

System.out.println("weight:"+d.weight);

d.move();

}

}

程序運(yùn)行結(jié)果:

dog is5 years old

weight:6.0

animalmove

DogMove

舉例三:

classSuperClass {

SuperClass() {

System.out.println("調(diào)用父類(lèi)無(wú)參構(gòu)造函數(shù)");

}

SuperClass(int n) {

System.out.println("調(diào)用父類(lèi)有參構(gòu)造函數(shù):" + n );

}

}

classSubClass extends SuperClass{

SubClass(int n) {

System.out.println("調(diào)用子類(lèi)有參構(gòu)造函數(shù):" + n );

}

SubClass(){

super(200);

System.out.println("調(diào)用子類(lèi)無(wú)參構(gòu)造函數(shù)");

}

}

publicclass InheritDemo2{

public static void main(String arg[]) {

SubClass s1 = new SubClass();

SubClass s2 = new SubClass(100);

}

}

程序運(yùn)行結(jié)果:

調(diào)用父類(lèi)有參構(gòu)造函數(shù):200

調(diào)用子類(lèi)無(wú)參構(gòu)造函數(shù)

調(diào)用父類(lèi)無(wú)參構(gòu)造函數(shù)

調(diào)用子類(lèi)有參構(gòu)造函數(shù):100

請(qǐng)自行分析程序運(yùn)行的結(jié)果,體會(huì)繼承的用法。

java又要封裝又要繼承可以嗎

封裝和繼承同時(shí)可以的

封裝:主要實(shí)現(xiàn)了隱藏細(xì)節(jié),對(duì)用戶提供訪問(wèn)接口,無(wú)需關(guān)心方法的具體實(shí)現(xiàn)。

繼承:很好的實(shí)現(xiàn)了代碼的復(fù)用,提高了編程效率。

多態(tài):程序的可擴(kuò)展性及可維護(hù)性增強(qiáng)。

繼承就是一種由已有的類(lèi)創(chuàng)建新類(lèi)的機(jī)制,是指在已有類(lèi)的基礎(chǔ)上擴(kuò)展功能。繼承中分為子類(lèi)和父類(lèi)

類(lèi)可以有兩種重要的成員:成員變量和方法。子類(lèi)的成員中有一部分是子類(lèi)自己聲明定義的,另一部分是從它的父類(lèi)繼承的。

1.所謂子類(lèi)繼承父類(lèi)的成員變量作為自己的一個(gè)成員變量,就好象它們是在子類(lèi)中直接聲明一樣,可以被子類(lèi)中自己聲明的任何實(shí)例方法操作.

2. 所謂子類(lèi)繼承父類(lèi)的方法作為子類(lèi)中的一個(gè)方法,就象它們是在子類(lèi)中直接聲明一樣,可以被子類(lèi)中自己聲明的任何實(shí)例方法調(diào)用。

(1) Java只支持單一繼承,也就是只有一個(gè)父類(lèi),利用extends 關(guān)鍵字繼承;

class A{ }

class B{ }

class C extends A,B{ // 錯(cuò)誤的,因?yàn)橥瑫r(shí)繼承了兩個(gè)父類(lèi) }

(2)Java中允許多層繼承

class A{ }

class B extends A{ }

class C extends B{ }

求一個(gè)Java代碼包含多態(tài)、繼承、封裝三個(gè)特性

//這就是一個(gè)封裝類(lèi),封裝的思想就是屬性私有化,提供可以訪問(wèn)設(shè)置屬性的共有方法

public class Person {

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public void talk(){

System.out.println("一個(gè)人在說(shuō)話");

}

}

//學(xué)生繼承了人類(lèi),因?yàn)閷W(xué)生也是人(廢話)

public class Student extends Person {

//班級(jí)

private String theClass;

//地址

private String address;

public String getTheClass() {

return theClass;

}

public void setTheClass(String theClass) {

this.theClass = theClass;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public void talk() {

System.out.println("一個(gè)學(xué)生在說(shuō)話");

}

public static void main(String[] args){

//多態(tài)也就是父類(lèi)引用指向子類(lèi)對(duì)象

Person student = new Student();

student.talk();

}

}

標(biāo)題名稱:java封裝繼承程序代碼 JAVA繼承代碼
網(wǎng)站URL:http://www.chinadenli.net/article8/dooesop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)ChatGPT網(wǎng)站改版定制開(kāi)發(fā)做網(wǎng)站外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)