java关键字小结

关键字总结:   public、protected、默认、private、final、static、this、super

//**********public、protected、默认、private**********//

--public--: 公共的
      被public修饰的的变量、类、方法在同一个工程(Java Project)中都可以被引用。

     
--protected--:受保护的
      被protected修饰的变量或者类在同一个包不同类中可以被引用,跨包引用不行,不同工程亦不能被引用。


--默认--:
      方法前不声明限定符则默认为protected,但是如果父类当中有方法是被protected修饰的,子类继承父类之后,不可以用父类中被protected修饰的方法。


--private--:
      被private修饰的方法或者变量只有在同一个类中可以被调用。限定范围最小。



思考一:为什么子类重写父类方法是,方法限定的范围只许扩大,不许缩小。

        例如,父类中有一个方法是public的,但是子类继承父类之后重写父类中的这个方法把修饰限定符改为private。则在自动转型之后,声明
的对象还是一个父类类型的,但是原来有一个public的方法被子类重写为private,现在就不能调用了。所以父类的方法还反而被限制了。所以限定
的范围只许扩大不许缩小。

class Student{
//父类用一个public的方法
public void print(){
   System.out.println("父类中的方法");
}

}

class UNStudent extends Student{
//子类重写父类方法时改为private
private void print(){
  System.out.println("子类中的方法");
}
}

class Test{

public static void main(String args []){

Student stu = new UNStudent();    //自动转型为 Student类型的对象
stu.print();  //父类中的print()方法已被子类重写,已经不能被调用了
}
}






//**********this、super***********//

--this--:  代表当前对象,一般用在方法(构造方法、一般方法)里面。
例如:
class Student{
//创建对象时,如果是默认不传参,则自动匹配该类中已有的与其参数对应的的构造方法
public Student(){
  this(0,0,0,"未命名");
}

public Student(int x,int y,String name){
this.x = x;     //哪个对象调用了它,"this"就代表这个对象
this.y = y;
this.name = name;
}

private int x,y;
String name;

}

--super-- 调用父类的方法
class Student{
//父类用一个public的方法
public void print(){
   System.out.println("父类中的方法");
}

}

class UNStudent extends Student{

public void test(){
super.test();
}
}





//************************final*******************//
其实可以把final视为进化版的const

1、被final修饰的类不能被继承
2、父类中被final修饰的方法 ,在子类继承之后可以使用,但是不能被重写
3、由final修饰的变量必须赋初值,而且之后不能再被修改

//********************static**************************//

static一般修饰 变量、方法、代码块。而且一般static属性前都是public的。

一个类中含有被static修饰的变量或者方法,在这个类创建对象时,被static修饰的变量是不会被拷贝到新开辟的内存中去的,意思就是说这个变量或者方法
是被这个类创建的所有对象所“公用的”,只需要类型就可以直接调用。

执行顺序:   static属性、static块儿>>>>>主函数>>>>>方法必须调用才会执行

class A{
public A(){
System.out.print("A");
}
}
************************************

class B extends A{
public B(){
System.out.print("B");
}
}
********************************

class C{
static A a = new A();               //第一个"A"
B b = new B();

public C(){
System.out.print("C");
}

public static void main(String args[]){
C.change();
}

public static void change(){
    B b = new B();   //在b调用构造方法之前还要调用父类的构造方法     打印出"AB"
}

}


运行的结果是  AAB

猜你喜欢

转载自wang-jianxin.iteye.com/blog/1595388