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