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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值