分为两类:访问修饰符和非访问修饰符。
一、访问修饰符
default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
我们可以可以通过以下表来说明访问权限:
修饰符 | 当前类 | 同一包内 | 子孙类 | 其他包 | 其他包子孙类 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | N | Y/N(说明) |
default | Y | Y | N | N | N |
private | Y | N | N | N | N |
子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。?
请注意以下方法继承的规则:
父类中声明为 public 的方法在子类中也必须为 public。
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
父类中声明为 private 的方法,不能够被继承。
二、非访问修饰符
static:用来修饰类变量和类方法。static早于对象产生,晚于对象销毁。
1、类变量:通过类.类变量的形式调用。当对象产生时,也可以通过对象.类变量的形式调用。
类变量存在于静态域中。
public class trandform {
int age;
String name;
static String a= "china";
trandform(int a,String b)
{
age=a;
name=b;
}
public void print()
{
System.out.print(age+name+trandform.a);
}
public static void main(String[] args) {
trandform b=new trandform(10,"liteng");
trandform b1=new trandform(20,"herry");
a="chinaa";
b.print();
b1.print();
System.out.print(trandform.a);
}
}
2.静态方法
类比于静态变量。
1.可以通过类.静态方法调用。
2.静态方法可以调用静态属性和方法,但不可以调用非静态属性和方法。但是非静态方法可以调用静态属性和方法。
final修饰符
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义(不能别子类修改),修饰的变量为常量,是不可修改的。
abstract修饰符
1、抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。
2
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract void sample();
public abstract class A()
{
public abstract void sample();
}
class B extends A()
{
public abstract void sample()
{ ..........}
}