static、final、abstract修饰符、接口

访问修饰符
本类 同包 子类 其他包
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();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值