关键字总结: 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
java关键字小结
猜你喜欢
转载自wang-jianxin.iteye.com/blog/1595388
今日推荐
周排行