Java常量、接口多实现、多继承和权限修饰符

学习目标:

了解Java常量、接口多实现、多继承和权限修饰符

学习内容:

1、 Java中的常量
2、 接口的多实现
3、 接口的多继承
4、权限修饰符


学习步骤

1、Java中的常量

接口中是可以定义成员变量 但是必须用 public static final 关键字修饰
从效果上来看 就相当于是一个常量

1、接口中的常量 用public static final 来修饰,是可以省略这个三个关键字的
2、相当于是常量,因此只能在初始化的时候进行赋值,后面不能更改
3、建议命名格式用大写字母加下划线

例题1:
package com.hg.day13.demo01;

public class Demo01Interface {
    int num = 5;
    public void method() {

    }
}

package com.hg.day13.demo01;

public interface MyInterfaceConst {
    public static final int NUM_OF_CLASS=5;


}

2、接口的多实现

1、接口中是没有静态代码块和构造方法的
2、一个类的直接父类只有一个 但是一个类可以实现多个接口
3、如果实现类 所实现的多个接口中 存在重复的抽象方法 那么只需要覆盖重写一次即可
4、如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类必须是一个抽象类
5、如果实现类所实现的多个接口中,存在重复的默认方法,那么实现类一定要对默认方法进行覆盖重写
6、一个类 如果直接父类当中的方法 和接口当中的默认方法产生了冲突,优先使用父类中的方法

例题2:
package com.hg.day13.demo02;

public class Demo02Interface {
    public static void main(String[] args) {
        Zi zi=new Zi();
        zi.method();
    }
}
package com.hg.day13.demo02;

public interface MyInterface {
    public default void method() {
        System.out.println("我是接口里面的默认方法");
    }
}

package com.hg.day13.demo02;

public interface MyInterfaceA {
    //错误写法 接口中不能有静态代码块
    //static {}
    //错误写法 接口中不能有构造方法
    //public MyInterfaceA()

    public abstract void methodA();

    public abstract void methodAbs();

    public default void methodDefault() {
        System.out.println("默认方法AAA");
    }
}


package com.hg.day13.demo02;

public interface MyInterfaceB {
    public abstract void methodB();

    public abstract void methodAbs();

    public default void methodDefault() {
        System.out.println("默认方法BBB");
    }
}

package com.hg.day13.demo02;

public abstract class MyInterfaceAbs implements MyInterfaceB,MyInterfaceA{
    @Override
    public void methodB() {

    }

    @Override
    public void methodAbs() {

    }

    @Override
    public void methodDefault(){
        MyInterfaceA.super.methodDefault();

    }
}

package com.hg.day13.demo02;

public class MyInterfaceImpl implements  MyInterfaceA,MyInterfaceB{

    @Override
    public void methodB() {

    }

    @Override
    public void methodA() {

    }

    //只需要写一次
    @Override
    public void methodAbs() {

    }

    @Override
    public void methodDefault(){
        MyInterfaceA.super.methodDefault();

    }
}

package com.hg.day13.demo02;

public class Fu {
    public void method() {
        System.out.println("我是父类的方法");
    }
}

package com.hg.day13.demo02;

public class Zi  extends Fu implements MyInterface{

}

3、接口的多继承

1、类和类之间是单继承 直接父类只有一个
2、类和接口之间是多实现 一个类可以实现多个接口
3、接口和接口之间是多继承的

注意:
1、多个父接口中的抽象方法如果重复 没有关系
2、多个父接口当中的默认方法 方法重复

例题3:
package com.hg.day13.demo03;

import com.hg.day13.demo02.MyInterface;

public class Demo03Relations {
    //MyInterface myinterface=new MyInterface(); 错误写法
}

package com.hg.day13.demo03;

/*
这个接口中一共有4个方法
methodA(接口A的方法)  methodB(接口B的方法) methodCommon(接口AB的方法)  method(自己的方法)
 */
public interface MyInterface extends MyInterfaceA,MyInterfaceB{
    public abstract void method();

    @Override
    default void methodDefault(){
        MyInterfaceA.super.methodDefault();

    }
}

package com.hg.day13.demo03;

public interface MyInterfaceA {
    public abstract void methodA();

    public abstract void methodCommon();

    public default void methodDefault() {
        System.out.println("AAAAA");
    }
}

package com.hg.day13.demo03;

public interface MyInterfaceB {
    public abstract void methodB();

    public abstract void methodCommon();

    public default void methodDefault() {
        System.out.println("BBBBB");
    }
}

package com.hg.day13.demo03;

//import com.hg.day13.demo02.MyInterface;

public class MyInterfaceImpl implements MyInterface {
    @Override
    public void methodA(){

    }
    @Override
    public void methodB(){

    }
    @Override
    public void method(){

    }
    @Override
    public void methodCommon(){

    }

    @Override
    public void methodDefault(){


    }
}

Java中的4中权限修饰符

package com.hg.day13.demo04;

/*
java 中有四种权限修饰符

                   public    protected   default    private
同一个类中(我自己)     yes        yes        yes         yes
同一个包中(我的邻居)    yes        yes        yes         no
同一包中的子类(儿子)    yes        yes        yes         no
不同包中的子类(儿子)    yes        yes        no          no
不同包的非子类         yes        no         no          no

 */
public class Demo01Main {
}

有关Java语言的修饰符,需要注意的问题有如下几个:
1.并不是每个修饰符都可以修饰类(指外部类),只有public和default可以。2.所有修饰符都可以修饰数据成员,方法成员,构造方法。3.为了代码安全起见,修饰符不要尽量使用权限大的,而是适用即可。比如,数据成员,如果没有特殊需要,尽可能用private.4.修饰符修饰的是“被访问”的权限。

例题4:
package com.hg.day13.demo04;

public class MyAnother {
    public void anotherMthode() {
        MyClass myclass =new MyClass() ;
        System.out.println(myclass.num);
    }
}

package com.hg.day13.demo04;

public class MyClass {
    public int num =5;

    public void method() {
        System.out.println(num);
    }

    int sum=num+1;
}

package com.hg.day13.demo04;

public class MySon1 extends MyClass{
    public void method() {
        //System.out.println(super.num);
    }
}

package com.hg.day13.demo05;

import com.hg.day13.demo04.MyClass;

public class MySon2 extends MyClass {
    public void method(){
        //System.out.println(super.num);
    }
}

package com.hg.day13.demo05;

import com.hg.day13.demo04.MyClass;

public class Stranger {
    public static void main(String[] args) {
        MyClass myclass=new MyClass();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值