学习目标:
了解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();
}
}