package test;
/**
* 作者:鐘志鋼 內容:面對對象(類,對象,構造函數) 時間:2013-3-6
* 三大特征:封裝,繼承,多態,(抽象)
* 1, 變量命名方法: 駱峰法,匈牙利法: myNameIs
* 下劃線法:my_name_is
* 2, 構造方法
* 默認是沒有參數
* 一個類可以有很多個構造方法(參與不同,數量與屬性)
* 沒有標識(void)
* 方法名與類名相同
* 主要用來初始化,實例化時會自動調用相應的構造函數(用參數對應)
* 子類調用無參數構造方法時,會默認先調用父類的構造函數
* 3, this的作用
* 可讀性強,對象明確
* 一般指代成員變量,屬於一個對象的,不是類的
* 每一個對象都分配了this
* 只能在類定義時使用
* 4, 類變量(static):整個類共同使用的變量,訪問和修改的都是同一個變量
* 格式:訪問修飾符 + static + 數據類型 + 變量名
* 訪問: 類名.變量名,或者,類對象名.變量名
* 5, 類方法,靜態方法,全局方法
* 只能訪問類變量(靜態);但非靜態方法可以訪問類變量
* 6, 抽象:
* 把共同的屬性和方法集合起來,形成一個類,就是抽象方法
* 比如:銀行賬號,有屬性:用戶名,賬號,密碼等 ,有共同方法:取款,存款等
* 7, 封裝:(電視機)
* 數據(屬性和方法)被保護在類內部,java中原則:盡可能把方法和變量變成私有的,只能通過成員方法進行操作
* 訪問控制修飾符:public(全公開),protected(包內),默認(不包括子類),private(只能類內),
* 包的三大作用:區分同名的類,分類管理類,控制訪問范圍
* 8, 繼承:class 子類 expends 父類
* 子類會自動擁有父類非private的方法和屬性
* 子類只能繼承一個父類,一個父類只有一個只類,(一個父親可以有多個孩子,一個孩子只有一個親生父親)
* 所有的類,都是Object的子類
* 9, 方法的重載(overload)與覆蓋(override重寫)
* 方法重載:同一類下,方法名相同(同一種功能),參數不同(不同實現方式):參數類型\個數\順序至少有一個不同;
* 方法重寫:子類的一個方法與父類的某個方法名稱,返回類型和參數一樣,就不再繼承父類的那個方法,直接用子類的這個方法覆蓋
* 重寫時不能縮小父類的方法訪問范圍
* 10,多態: 一個對象的多種狀態
*
* @author Administrator
*
*/
public class 面對對象 {
/**
* @param args
*/
public static void main(String[] args) {
面對對象 面 = new 面對對象();
}
public 面對對象() {
// 實例化一個對象
Cat cat1 = new Cat(3, "小花");// 需要調用構造函數
Cat cat3 = new Cat();// 當類中存在有參數的構造函數而又沒有寫有參數的構造函數時不能調用無參函數
// 分步實例化
Cat cat2;// 一般用在全局聲明
cat2 = new Cat(4, "小黑");// 一般用在方法內部實例化
cat3.age = 5;
cat3.name = "小紅";
cat3.weight = 3;
Cat cat4 = new Cat1();// 向上
// 定義其它屬性
cat1.weight = 2;
cat2.weight = 1;
System.out.println("小花的名字是:" + cat1.name + ",年齡是:" + cat1.age + ",體重是:"
+ cat1.weight);
cat1.jump();// 調用cat的方法,每運行一個函數時,建立一個棧,各不相干,成員變量名可以相同
System.out.println(cat1.count(100));// 算術
System.out.println(cat1.count(20, 100));// 算術
Cat c = cat1;// 內存中只存在一個實例(new),一旦改變,則兩個都變
// cat1.age = 10;
// c.age = 9;
System.out.println("c==" + c.age);
// 垃圾回收機制
cat3 = null;// 這樣之後,虛擬機在適當的時候自動回收cat3,程序員無需管;
int a = 9;
int b = a;
a = 10;
System.out.println("b = " + b);
// 調用打印乘法表的方法
cat1.juju(4);
int mys[][] = new int[][] { { 11, 12, 13 }, { 21, 22, 23 },
{ 31, 32, 33 }, };
cat1.zhangzi(mys);// 數組轉置
//靜態方法使用
System.out.println("Cat.total=="+Cat.total);
//一般情況下都這樣使用
System.out.println("Cat.total==" + Cat.mytotal() );
//封裝
Clerk c1 = new Clerk("小花", 20, 3.9f);
System.out.println(c1.name);
//System.out.println(c1.sal);//如果不在一個類中,是能訪問private變量的
//可以用如下方法
System.out.println(c1.getsal());
Cat1 cat = new Cat1();
}
// 寫一個類繼承自Cat,會繼承其全部屬性和方法(如果可以繼承的話);
class Cat1 extends Cat {
int color ;//新加入一個屬性
public void jump(){
//重寫了jump方法
System.out.println("我是cat1,我能跳三米高");
}
}
class Cat2 extends Cat{
int big;
}
// 定義一個貓類,代表一類事物
static class Cat {
// 成員變量
int myage;
protected int age;
protected String name;
protected int weight;
static int total = 0;//靜態變量\類變量,屬於大家的,類下的所有實例共有的變量,也可以被任何實例訪問
// 添加一個構造方法,方便實例化;
public Cat(int age, String name) {
System.out.println("我是構造函數");
this.add();
this.name = name;
this.age = age;
}
public Cat() {
this.add();
}
public void add(){
total ++;
System.out.println("加入一只新貓");
System.out.println("目前貓的總數是:" + total);
}
// 成員方法
public void jump() {
System.out.println("我是貓,我會跳");
}
// 貓會計算
public int count(int a) {
int b = 0;
for (int i = 1; i < a + 1; i++) {
b += i;
System.out.println(i);
}
return b;
}
public static int mytotal (){
return total;
}
// 貓還會更復雜的計算
public int count(int a, int b) {
int c = 0;
for (int i = a; i < b + 1; i++) {
c += i;
}
return c;
}
public void juju(int a) {
// 打印九九乘法表
for (int i = 1; i < a + 1; i++) {
for (int j = 1; j < a + 1; j++) {
System.out.print(j + "*" + i + "=" + i * j);
if ((i * j + "").length() > 1) {
System.out.print(" ");
} else {
System.out.print(" ");
}
if (j == i) {
System.out.println();
break;
}
}
}
}
public void zhangzi(int mys[][]) {// 轉置
for (int i = 0; i < mys.length; i++) {
for (int j = 0; j < mys[0].length; j++) {
System.out.print(mys[i][j] + " ");
}
System.out.println();
}
for (int i = 0; i < mys.length; i++) {
for (int j = 0; j < mys[0].length; j++) {
if (j > i) {
int a = mys[i][j];
mys[i][j] = mys[j][i];
mys[j][i] = a;
}
// System.out.print(mys[i][j] + " ");
}
// System.out.println();
}
for (int i = 0; i < mys.length; i++) {
for (int j = 0; j < mys[0].length; j++) {
System.out.print(mys[i][j] + " ");
}
System.out.println();
}
}
}
public static class dog {//當一個類被定義時,就會把變量和方法存入到代碼區,實例化時只執行相應的構造函數
static int i = 1;
//靜態區域塊,只執行一次
// static {
// i++;
// }
public dog (){
i ++;
}
}
class Clerk{
public String name;
private int age;
private float sal; www.2cto.com
public Clerk (String name, int age, float sal){
this.name = name;
this.sal = sal;
this.age = age;
}
public float getsal (){
return sal;
}
}
}