Java程序设计—面向对象0118

Posted on 2018-01-18 18:02  Jonathan_C  阅读(227)  评论(0)    收藏  举报
  • Java提供的类内的访问修饰符,具有C++类似的功能,主要包括:privat, public 和protect。
  1. Public 公共访问权限。被Public修饰的字段或方法,可在全局中访问,前提是这个类也是Public的。

    

  2. Private修饰的,外部无法访问其内部细节。

  3. Protected的使用,是在继承关系中,父类需要将一个方法暴露给子类的时候。

  • JavaBean的相关规范
  1. 必须使用public来修饰类
  2. 必须包含公共无参数的构造器
  3. 包含属性的操作手段和,如赋值或者获得属性值之类。

  成员包括:方法method,事件event 和属性property。

    • 成员变量不是属性。
    • 属性通过setter/getter决定的。

  个人感觉,其实JavaBean的规范和C++的相关规范很像。学过C++都知道成员变量用public private等修饰符修饰的时候,在函数外访问的权限是不一样的。下面是代码,可以体会一下:

 1 class User{
 2     private int a;
 3     private String n="AAA";
 4     public int getA() {
 5         return a;
 6     }
 7     public String getN() {
 8         return n;
 9     }
10     public void setA(int x) {
11         a=x;
12     }
13     
14 }
15 class JavaBean_Trial {
16     public static void main(String[] args) {
17         User u1=new User();
18         u1.setA(1110);
19         String get=u1.getN();
20         System.out.println(get);//AAA
21     }    
22 }

    这些代码无非就是定义了一些setter和getter,用public来修饰之后,在类外调用这些Public修饰的方法,可以访问和修改类内private修饰的字段。

  • This 关键字:表示当前对象。
  1. 构造器中的this,指得是当前创建的那一个对象。
  2. 方法中this: 哪个对象调用this所在的方法,那么this表示那个对象。这个类似于js中的this。这里的先决条件是:this是出现在方法中的。
 1         //上述的类内其它方法省略
 2     public void show() {
 3         System.out.println(this.name+":"+this.age);
 4     }
 5     
 6 }        
 7 class JavaBean_Trial {
 8     public static void main(String[] args) {
 9         User u1=new User();
10         u1.setAge(10);
11         u1.setName("AAA");
12         u1.show();//AAA:10
13         
14         User u2=new User();
15         u2.setAge(100);
16         u2.setName("BBB");
17         u2.show();//BB:100
18     }    
19 }        

    This使用的场景包括:

    • 解决成员变量和参数重名的问题。
1 public void setName(String name) {
2         this.name=name;
3     }
    • 同类的实例方法互相调用。
1     public void show() {
2         System.out.println(this.name+":"+this.age);
3     }
4     public void sayHello() {
5         System.out.println("成功调用sayhello");
6         this.show();//this可以省略
7     }//当我用对象u1调用sayHello的时候,sayHello会接着调用show,同时会显示出u1的name和age属性。
    • this可作为参数传递给另一个方法。指代调用这个方法的对象。
    • this作为方法的返回值,出现在链式编程中。
    • static和this不能同时使用。首先要明白,static是类域,而this指的是对象的索引。当static在jvm加载的时候,还没有对象,所以不能使用this.
    • 构造器重载时候的互相调用问题。一般少参数的构造器,调用多参数的构造器。
 1     User(String name, int age, int weight, int height){
 2         this.name=name;
 3         this.age=age;
 4         this.weight=weight;
 5         this.height=height;
 6     }//overridden constructor 4
 7     
 8     User(int age){
 9         
10         this("x",age,0,0);//User(String name, int age, int weight, int height)
11         this.age=age;
12     }//call constructor 4

    在决定是用构造器还是用setter注入方法?当需要根据数据来构造对象的时候,建议使用构造的方式来创建对象。可以节省代码。

class line {
	private int x;
	private int y;
	line(){};
	line(int start, int end){
		x=start;
		y=end;
	}//constructor line 1
	public void setX(int start) {
		x=start;
	}//setter x
	public void setY(int end) {
		y=end;
	}//setter y
}		

//在main接口内
    line L1=new line(1,2);//call constructor line 1
    line L2=new line();//initialize
    L2.setX(1);//set x
    L2.setY(2);// set y                

  显然L1的创建更快捷。