Java学习 第四章 java面向对象(二)
一、封裝性
1、封裝性產(chǎn)生目的
保護(hù)某些屬性和方法不被外部所看見。
2、封裝性的實現(xiàn)
?為屬性和方法進(jìn)行封裝是通過關(guān)鍵字private聲明的;
?實現(xiàn)該屬性的set和get方法,為外部所訪問;
?eg: ?Person類
?private String name;
?public void getName(String name){
return name;//得到
}
?public void setName(String name){
this.name = name;//設(shè)置
}
創(chuàng)建get和set方法的快捷鍵:鼠標(biāo)右鍵->Source->Generate Getters and Setters... ?選中屬性點擊OK,如下圖:
? ??
?
3、匿名對象
?匿名對象就是沒有名字的對象,如果程序中只是用一次該對象,就可以使用匿名對象的方式。
?eg: 創(chuàng)建一個Person類,并使用此類:
? //匿名對象 new per.tell() 只使用一次
//正常情況 Person per = new Person(); ?per.tell();
4、構(gòu)造方法
(1)格式:訪問修飾符 類名稱(){
程序語句
}
(2)注意:構(gòu)造方法名稱必須與類名一致;構(gòu)造方法沒有返回值;構(gòu)造方法可以有參數(shù);構(gòu)造方法可以重載;
eg:class People{//實例化類的時候會自動執(zhí)行構(gòu)造函數(shù)
// 構(gòu)造方法
public People(){
System.out.println("hello");
}
?}
(3)構(gòu)造方法主要是為類中的屬性初始化;
(4)每個類在實例化之后都會調(diào)用構(gòu)造方法,如果沒有構(gòu)造方法,程序在編譯的時候會創(chuàng)建一個無參數(shù)的什么都不做的構(gòu)造方法。
?二、Java面向?qū)ο蠡咎卣?#xff1a;繼承
? ? ??1、繼承的基本概念:擴展父類的功能;
2、Java中使用extends關(guān)鍵字完成繼承
class 子類 extends 父類{ }
3、在java中只允許單繼承,不能繼承多個,可以多層繼承;
4、子類不能直接訪問負(fù)累的私有成員;
5、子類對象的實例化
?在子類對象實例化之前,必須先調(diào)用父類中的構(gòu)造方法,之后調(diào)用子類構(gòu)造方法
?
6、方法的重寫
在繼承中,也存在著重寫的概念,其實就是子類定義了和父類同名的方法;
定義: 方法名稱相同,返回值類型相同,參數(shù)也同。
可使用super關(guān)鍵字,實現(xiàn)父類的方法;
eg:
重寫限制:
被子類重寫的方法擁有比父類方法更加嚴(yán)格的訪問權(quán)限
訪問權(quán)限:
private(作用域:當(dāng)前類) < default(作用域:同一包) < public(作用域:整個項目)?
7、super關(guān)鍵字:
強行調(diào)用父類方法的執(zhí)行
super不一定在重寫中使用,也可以表示那些方法是從父類中繼承而來的。
8、java重寫與重載的區(qū)別
三、Java面向?qū)ο?多態(tài)性
1、多態(tài)性的體現(xiàn):
方法的重載和重寫;
對象的多態(tài)性;
2、對象的多態(tài)性:
向上轉(zhuǎn)型:程序會自動完成;父類 父類對象 = 子類實例
eg:類B繼承類A: B b = new B(); A a = b;
向下轉(zhuǎn)型:強制類型轉(zhuǎn)換;子類 子類對象 = (子類)父類實例
eg:類B繼承類A:A a = new B(); B b = (B)a;
3、instanceof關(guān)鍵字
在Java中可以使用instanceof關(guān)鍵字判斷一個對象到底是不是一個類的實例。
instanceof ?返回Bool值
eg: A a = new A();
System.out.println(a instanceof A); ? true
System.out.println(a instanceof B); flase
四、Java面向?qū)ο笾幸玫膫鬟f
1、引用傳遞
范例:
class Person{
int age = 10;}public class Demo{public static void main(String args[]){Person p = new Person();p.age = 20;System.out.println(p.age);//結(jié)果為20;tell(p);System.out.println(p.age);//結(jié)果為30;}public static void tell(Person p2){p2.age = 30;}}?內(nèi)存示例圖:r1改動指向
?
范例2:
public static void main(String args[]){String str1 = "hello"System.out.println(str1);//結(jié)果為hello;tell(str1);System.out.println(str1);//結(jié)果為hello;}public static void tell(String str2){str2 = "jike";}String類型不可改變屬性,內(nèi)存示意圖:
?
五、java面向?qū)ο?抽象類與接口
1、final關(guān)鍵字在java中被稱為完結(jié)器,表示最終的意思。
2、final能聲明類、方法、屬性:
使用final聲明的類不能被繼承;
使用final聲明的方法不能被重寫;
使用final聲明的變量變成常量,常量是不可以被修改的;
通過final聲明的屬性名字大寫,例如 final String NAME = "xx";
3、抽象類概念:包含一個抽象方法的類就是抽象類;
抽象方法:聲明而未被實現(xiàn)的方法,抽象方法必須使用abstract關(guān)鍵字聲明;
抽象類被子類繼承,子類(如果不是抽象類)必須重寫抽象類中俄的所有抽象方法;
定義格式:
abstract class className{
屬性
方法
抽象方法
}
抽象類不能直接實例化,要通過其子類進(jìn)行實例化;
eg: ?
abstract class Abs{
private int age;
public void tell(){
}
public abstract void say();
}
class AbsDemo extends Abs{
public void say(){
}
}
AbsDemo a = new AbsDemo();
4、接口
接口是java中最重要的概念,接口可以理解為一種特殊的類,里面全部是由全局變量和公共的抽象方法所組成
接口的格式
interface interfaceName{
全局常量
抽象方法
? }
? 接口的實現(xiàn)也是必須通過子類,使用關(guān)鍵字implements,而且接口是可以多實現(xiàn)的;
一個類可以同時繼承抽象類和實現(xiàn)接口;eg class A extends xx implements xx(){}.
一個接口不能繼承一個抽象類,但是卻可以通過extends關(guān)鍵字同時繼承多個接口,實現(xiàn)接口的多繼承;
eg: interface Inter{
public static final int AGE = 100;
public abstract void tell(); //public abstract 可省略
}
class A implement void Inter{
public void tell(){
}
}
interface Inter3 extends Inter1,Inter2(){}
A a = ?new A();
a.tell();
System.out.println(Inter.AGE);
六、Java面向?qū)ο笾盒?/span>
1、認(rèn)識泛型
? 泛型是在JDK1.5以后增加的新功能。泛型(Generic)
泛型可以解決數(shù)據(jù)類型的安全問題,他主要的原理是在聲明的時候通過一個標(biāo)識表示類中某個屬性的類型活著是某個方法的返回值及參數(shù)類型。
格式:
訪問權(quán)限 class 類名稱<泛型,泛型...>{
屬性
方法
}
對象的創(chuàng)建
類名稱<具體類型> 對象名稱 = new 類名稱<具體類型>();
eg:
class Point<T>{
private T x;
public T getX(){
reutrn x;
}
public T setX(T x){
this.x = x;
}
}
Point<String> p = new Point<String>();
?p.setX("經(jīng)度為:100");
2、構(gòu)造方法使用泛型
構(gòu)造方法可以為類中的屬性初始化,那么如果類中的屬性通過泛型指定,而又需要通過構(gòu)造方法設(shè)置屬性內(nèi)容的時候,那么構(gòu)造方法的定義與之前并無不同,不需要像類聲明那樣制定泛型。
eg: class Con<T>{
private T value;
public Con(T value){
this.value = value;
}
public T getValue(){
return value;
}
public T setValue(T value){
this.value = value;
}
}
Con<String> c = new Con<String>("構(gòu)造方法中使用泛型");
3、指定多個泛型,設(shè)置多個泛型直接在<>中添加多個泛型就可以了,中間用逗號隔開。例如<K,T>
4、通配符 :? ? (不論什么類型都可以使用)
5、泛型接口?
在JDK1.5之后,不僅僅可以聲明泛型類,也可以聲明泛型接口,聲明泛型接口和聲明泛型的語法類似,也是在接口名稱后面加上<T>
格式: interface 接口名稱<泛型標(biāo)識>{}
6、泛型方法
泛型方法中可以定義泛型參數(shù),此時,參數(shù)的類型就是傳入數(shù)據(jù)類型。
格式:訪問權(quán)限 <泛型標(biāo)識> 泛型標(biāo)識 方法名稱([泛型標(biāo)識 參數(shù)名稱])
eg:
public <T>T tell(T t){
return t;
}
7、泛型數(shù)組
泛型數(shù)組和泛型方法搭配使用;
在使用泛型方法的時候,也可以傳遞或返回一個泛型數(shù)組;
eg:
public static <T>void tell(T arr[]){
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
調(diào)用:
Integer arr[] = {1,2,3,4};
tell(arr);
參考:極客學(xué)院課程?http://ke.jikexueyuan.com/zhiye/javaweb/
轉(zhuǎn)載于:https://www.cnblogs.com/lulushen/p/8044069.html
總結(jié)
以上是生活随笔為你收集整理的Java学习 第四章 java面向对象(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016级算法第六次上机-A.Bambo
- 下一篇: Ubuntu 下常用的命令 简略记录