新聞中心
求JAVA封裝和繼承案例?
封裝性是整個(gè)面向?qū)ο蟮牡谝淮筇匦裕^的封裝性是指類內(nèi)部的操作對外部不可見。
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、銀州ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的銀州網(wǎng)站制作公司
范例:觀察如下的程序問題
class Person { // 類名稱的單詞首字母必須大寫
String name ; // 姓名,是一個(gè)字符串所以使用String
int age ; // 年齡是一個(gè)整數(shù),所以使用int
public void tell(){ // 定義一個(gè)方法
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "張三" ;
per.age = -30 ;
per.tell() ;
}
}
此時(shí)的程序從技術(shù)(語法)上而言沒有任何的問題,但是從實(shí)際的生活(業(yè)務(wù))上來看,一個(gè)人的年齡絕對不可能是-30歲,所以這個(gè)時(shí)候造成問題的主要原因就是類中的操作對外部可見。
此時(shí),就可以通過封裝性來解決此類問題,如果現(xiàn)在要想對類中的屬性或方法封裝,可以直接使用private關(guān)鍵字完成。
class Person { // 類名稱的單詞首字母必須大寫
private String name ; // 姓名,是一個(gè)字符串所以使用String
private int age ; // 年齡是一個(gè)整數(shù),所以使用int
public void tell(){ // 定義一個(gè)方法
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "張三" ;
per.age = 99999 ;
per.tell() ;
}
}
此時(shí),程序編譯之后出現(xiàn)了以下的錯(cuò)誤信息:
ClassDemo.java:11: name has private access in Person
per.name = "張三" ;
^
ClassDemo.java:12: age has private access in Person
per.age = 99999 ;
^
2 errors
由于name和age兩個(gè)屬性被private聲明了(封裝了,私有)所以,現(xiàn)在根本無法被外部所訪問,很明顯,此時(shí)的屬性絕對安全,但是封裝歸封裝了,一個(gè)問題就出現(xiàn)了,現(xiàn)在的屬性無法操作了,無法操作就沒有意義了,所以此時(shí),就可以給出一個(gè)概念,以后凡是類中的屬性在定義的時(shí)候必須封裝,封裝之后的屬性一定要通過setter、getter方法設(shè)置和取得。Setter和getter方法本身有自己的命名規(guī)范。
? 例如:private String name ;
? setter:public void setName(String na)
? getter:public String getName()
class Person { // 類名稱的單詞首字母必須大寫
private String name ; // 姓名,是一個(gè)字符串所以使用String
private int age ; // 年齡是一個(gè)整數(shù),所以使用int
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ // 定義一個(gè)方法
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("張三") ;
per.setAge(99999) ;
per.tell() ;
}
}
此時(shí),雖然是通過setter和getter方法間接的訪問了私有屬性,但是卻沒有檢驗(yàn),一旦需要檢驗(yàn),則檢驗(yàn)的操作應(yīng)該放在setter語句之中。
所有的設(shè)置應(yīng)該在setter中完成,而getter方法只是將內(nèi)容簡單的返回即可。
class Person { // 類名稱的單詞首字母必須大寫
private String name ; // 姓名,是一個(gè)字符串所以使用String
private int age ; // 年齡是一個(gè)整數(shù),所以使用int
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a0 a200){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ // 定義一個(gè)方法
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("張三") ;
per.setAge(99) ;
per.tell() ;
}
}
此時(shí),就通過封裝性解決了設(shè)置錯(cuò)誤內(nèi)容的問題。
一定要注意的是,封裝性出了在屬性聲明上外,也可以在方法上聲明。
private void info(){ // 私有方法
System.out.println("*************************") ;
}
public void tell(){ // 定義一個(gè)方法
this.info() ;
System.out.println("姓名:" + name + ",年齡:" + age) ;
}
如果現(xiàn)在調(diào)用的是本類中的方法,可以通過“this.方法()”的形式訪問。
在JAVA中如何封裝代碼?
封裝在java中有兩種表現(xiàn)
1.用類封裝一個(gè)事物的屬性和方法。
2.用方法來封裝一個(gè)固定的算法。
樓上所說的其實(shí)是封裝的程度不一樣,在面向?qū)ο蟮男g(shù)語中粒度來表示這個(gè)程度。
封裝其實(shí)是要看情況而定的,如果你這個(gè)類是描述人的,需要這個(gè)人完成一些基本的動(dòng)作,如吃飯,走路,那么就不用把細(xì)胞也封裝進(jìn)來。但是如果“人”這個(gè)類,需要做醫(yī)學(xué)的研究用,那么就需要封裝細(xì)胞這個(gè)屬性了。
代碼打多了就自然能理解了,不是一個(gè)復(fù)雜的概念。呵呵。
Java里的封裝到底是什么意思,請舉例說明?
封裝:是指隱藏對象的屬性(成員變量)和實(shí)現(xiàn)細(xì)節(jié)(方法),僅對外提供公共訪問方式。
好處:
隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問方式
提高了代碼的復(fù)用性
提高安全性。
封裝原則:
將不需要對外提供的內(nèi)容都隱藏起來。
把屬性隱藏,提供公共方法對其訪問。
常見封裝 :
成員變量封裝---
private 數(shù)據(jù)類型 xxx ;
private關(guān)鍵字:
是一個(gè)權(quán)限修飾符。
可以修飾成員(成員變量和成員方法)
被private修飾的成員只在本類中才能訪問。
例如:
class show(){
private String name;//其他類無法訪問當(dāng)前私有成員
public String getName(){//可以通過public修飾的方法訪問name
return this.name;
}
}
誰能用段代碼給我解釋下java的封裝啊?
public class Man {
//這里是對屬性的封裝,一個(gè)人的姓名,年齡,妻子都是這個(gè)對象(人)的私有屬性
private String name;
private int age;
private Woman wife;
//這里是對改人對外界提供方法的封裝,可以設(shè)置改男人的妻子,姓名,年齡也可以獲取改男人的姓名和年齡
public void setWife(Woman wife) {
this.wife = wife;
}
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 class Woman {
//同樣這里是屬性封裝
private String name;
private int age;
private Man husband;
//方法封裝
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 Man getHusband() {
return husband;
}
public void setHusband(Man husband) {
this.husband = husband;
}
}
/**
* 仔細(xì)看就會發(fā)現(xiàn),Man類沒有提供getWife的方法,這是以為男人不想讓自己的妻子被外界訪問,
*
* 直接下來呢,就是封裝可以吧一個(gè)對象的屬性私有,而提供一些可以被外界訪問的屬性的方法,
*
* 比如說,name屬性,Man和Woman類都有相應(yīng)的get和set方法,外界都可以通過這些方法訪問和修改
*
* 同時(shí)對一些改對象不想讓外界訪問的屬性,就不提供其方法,比如說Man的wife屬性,就沒有g(shù)et方法
*
* 外界是不能帶到Man類的wife屬性的
*
* 呵呵
* 奇怪的是Woman類有husband的get方法,這就是封裝的一點(diǎn),還有的其他朋友也說到了
*/
在java中什么是封裝,舉一個(gè)例子說明一下
private String sex; //性別 private int age; //年齡 private String job; //工作 //以后只要是設(shè)置值的時(shí)候 實(shí)例化這個(gè)類 //比如設(shè)置年齡 那么調(diào)用setAge(String age);方法 //傳入年齡值 注意前面是什麼類型 這里為int //TestBean test=new TestBean(); //String name="張三"; //test.setName(name); //設(shè)置值后 很復(fù)雜的多個(gè)屬性 便變成了一個(gè)簡單的JavaBean對象 //取值也很簡單 前提是你已經(jīng)設(shè)置了多項(xiàng)屬性的值 //比如調(diào)用年齡 getAge()就可以拿到年齡的值 //對應(yīng)其類型 可以這樣調(diào)用 //TestBean test=new TestBean(); //String name=test.getName(); //使用JavaBean的好處有 實(shí)現(xiàn)MVC結(jié)構(gòu) //封裝多個(gè)屬性或?qū)ο鬄橐粋€(gè)對象 私有的屬性 而共有的方法 大大提高程序安全性 //。。。等等
java 封裝
public?class?Student2?{
private?String?name;
private?String?age;
private?String?sex;
private?String?major;
public?Student2(String?name,?String?age)?{
super();
this.name?=?name;
this.age?=?age;
this.sex?=?"男";
this.major?=?"JAVA";
}
public?Student2(String?name,?String?age,?String?sex,?String?major)?{
super();
this.name?=?name;
this.age?=?age;
this.sex?=?sex;
this.major?=?major;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
public?String?getAge()?{
return?age;
}
public?void?setAge(String?age)?{
this.age?=?age;
}
public?String?getSex()?{
return?sex;
}
public?void?setSex(String?sex)?{
this.sex?=?sex;
}
public?String?getMajor()?{
return?major;
}
public?void?setMajor(String?major)?{
this.major?=?major;
}
public?String?take()?{
return?"大家好,我叫"?+?name?+?",今年"?+?age?+?"歲,性別"?+?sex?+?",專業(yè)是"?+?major;
}
}
student2類
public?class?Student?{
/**
*?@param?args
*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
Student2?s1?=?new?Student2("張三",?"18");
Student2?s2?=?new?Student2("李四",?"15",?"女",?"C++");
System.out.println(s1.take());
System.out.println(s2.take());
}
}
測試方法
結(jié)果:
大家好,我叫張三,今年18歲,性別男,專業(yè)是JAVA
大家好,我叫李四,今年15歲,性別女,專業(yè)是C++
你是要這個(gè)東西么
本文標(biāo)題:java中封裝代碼實(shí)例,JAVA中封裝
網(wǎng)站鏈接:http://www.dlmjj.cn/article/hopddd.html