访问修饰符
本类 同包 子类 其他包
public √ √ √ √
protected √ √ √ ×
Default(缺省的)√ √ × ×
private √ × × ×
package xzy0705;
/*
修饰符
static:静态的
属性:当前就是静态变量(类变量),不再依附于对象而存在了,现在直接可以通过类来调用
方法:当前方法就是静态方法,不在依附于对象而存在了,现在直接可以通过类来调用了
块:就是一段程序体,当类被加载时执行,只执行一次,如果类中有多个静态块,依次按照顺序执行
注意:
1.一个类中的静态内容不能直接调用本类中非静态内容(静态内容优先)
2.一个类中的成员内容可以直接访问本类中的静态内容
3.静态方法和静态块不能使用this和super关键字
*/
public class DemoA {
String name;
static int age;
public void a(){
System.out.println("aaaa");
}
public static void b(){
System.out.println("bbb");
}
static {//类被加载(出现类名时)的时候调用
System.out.println("ddd");
}
static {
System.out.println("eee");
}
public static void main(String[] args) {
System.out.println(DemoA.age);
DemoA.b();
DemoA da=new DemoA();
da.a();
}
}
package xzy0705;
/*
修饰符
final:最终的
类:修饰类,代表这个类是最终的类,没有子类,即不能被继承
属性:修饰属性,代表这个属性的值不能修改,所以在声明时必须赋值
方法:修饰方法,代表这个方法不能被重写
注意:
1.修饰属性时必须赋值
2.final可以修饰局部变量
3.常量的定义方式:public static final 数据类型 常量名 = 值; 常量名纯大写
*/
public class DemoB {
String a;
public static final int A=5;//常量A
//final String b;报错,因为修饰属性,这个属性不能修改,所以必须赋值
final String b="aaa";
public void a(){
System.out.println("aa");
}
public final void b(){
System.out.println("bb");
}
}
class DemoB2 extends DemoB{
public void a(){
System.out.println("aa2");
}
//public void b(){}//报错 因为b方法 父类指定为final 即不可重写
}
package xzy0705;
/*
abstract:抽象的
类:代表这个类中有未完成的方法,代表这个类是抽象的
方法:代表这个方法没有方法体,也就是说这个方法未实现
注意:
1.一个类中只要有一个方法未实现,这个类就是抽象类
2.类中的方法都是非抽象方法,类也可以被定义为抽象类
3.抽象类不能被new,即不能通过抽象类来产生对象
4.抽象类中可以书写构造器
5.如何调用抽象类中的非抽象属性和方法呢?
5.1 可以把非抽象方法声明成static
5.2 可以书写一个子类,让子类继承当前抽象类,产生子类对象,调用这个方法
6.抽象类的子类如果也不实现未完成的方法,子类也应被声明成抽象类
7.abstract和final关键字不能同时使用
*/
public /*abstract*/ class DemoC {
public void a(){
System.out.println("aaa");
}
public abstract void b();//报错,因为有方法是抽象的,所以这个类必须也是抽象的
//类为抽象的,方法可不为抽象的,不会报错
}
package xzy0705;
/*
interface:接口,接口仅仅只是一个规范,接口中可以定义属性和方法
接口没有构造器,
接口中的属性都是常量
接口中的方法都是抽象的
接口不能被new
一个接口可以继承另一接口
一个类可以实现多个接口
接口中的作用域都是public的,如果不写就是public(默认)
*/
public interface InterfaceA {
int A=9;//不赋值报错
void a();
void b();
}
package xzy0705;
public interface InterfaceB {
int B = 11;
public void c();
public void d();
}
package xzy0705;
//对于类 :ctrl+i 快捷键 得到所有继承下来的方法
public class DemoF extends Object implements InterfaceA,InterfaceB{
public void a() { System.out.println("a"); }
public void b() { System.out.println("b"); }
public void c() { System.out.println("c"); }
public void d() { System.out.println("d"); }
public static void main(String[] args) {
DemoF df1 = new DemoF();
InterfaceA df2 = new DemoF();
InterfaceB df3 = new DemoF();
Object df4 = new DemoF();
df1.a();
((DemoF) df4).d();
}
}