接口
1. final关键字
1.1 final修饰属性
1.1.1 普通常量
常量 final修饰的属性 称之为常量 名字全部大写 多个单词下划线分割 通常在定义的时候赋值 或者在构造方法中赋值
package com.qfedu.test1;/*** 常量* 只有final修饰的属性 称之为常量* 名字全部大写 多个单词下划线分割* 通常在定义的时候赋值 或者在构造方法中赋值* @author WHD**/public class TestFinalField {String name;final double PI = 3.14;final double NUM ;public TestFinalField() {NUM = 20;}public TestFinalField(String name) {NUM = 30;}}
1.1.2 静态常量
静态常量 名字全部大写 多个单词以下划线分割 通常在定义的时候赋值 或者在静态代码块中赋值 这两种赋值方式都是为了保证在使用之前有具体的值
package com.qfedu.test1;/*** 静态常量* 名字全部大写 多个单词以下划线分割* 通常在定义的时候赋值 或者在静态代码块中赋值 这两种赋值方式都是为了保证在使用之前有具体的值** @author WHD**/public class Calc {public final static double PI;static {PI = 3.14;}static final String COUNTRY_NAME = "中华人民共和国";double radio;public double around() {return PI * radio * 2;}public static void main(String[] args) {// pi = 3.24;}}
1.2 final修饰方法
final修饰方法 表示此方法可以被继承,不能被重写
package com.qfedu.test1;/*** final修饰方法 表示此方法可以被继承,不能被重写* @author WHD**/public class TestFinalMethod {public final void m1() {System.out.println("final修饰的方法");}}class A extends TestFinalMethod{// public void m1() {// System.out.println("final修饰的方法");// }public static void main(String[] args) {A a = new A();a.m1();}}
1.3 final修饰类
final修饰的类不能被继承
package com.qfedu.test1;/*** final修饰的类不能被继承* @author WHD**/public final class TestFinalClass {}//class B extends TestFinalClass{////}
2. 接口
1.接口中默认都是全局抽象方法 不管是否书写 public abstract 都有这个效果 2.接口不能直接new对象 必须通过new实现类(子类)的方式创建对象 多态向上转型 3.实现类必须重写接口中的所有抽象方法,除非实现类也是抽象类或者接口 4.接口中不能写普通属性 默认都是全局静态常量 不管是否书写public static final都有这个效果 5.接口中不能写构造方法 6.接口可以继承多个接口 实现类可以实现多个接口 7.接口依然可以实现多态 实现的方式与之前一致
面试题:Java支持多继承吗? 不支持,但是我们可以通过接口继承多个接口的方式 模拟多继承的效果
package com.qfedu.test6;/*** 打印机类* 组成部分* 墨盒* 纸张* @author WHD**/public class Printer {private InkBox inkBox;private Paper paper;public void setInkBox(InkBox inkBox) {this.inkBox = inkBox;}public InkBox getInkBox() {return inkBox;}public void setPaper(Paper paper) {this.paper = paper;}public Paper getPaper() {return paper;}public void print() {System.out.println("使用" +this.getInkBox().getInkBoxType()+ "在" + this.getPaper().getPaperType() +"纸张上打印");}}
package com.qfedu.test6;public class BlackInkBox implements InkBox{@Overridepublic String getInkBoxType() {return "黑色墨盒";}}
package com.qfedu.test6;public class ColorInkBox implements InkBox{@Overridepublic String getInkBoxType() {return "彩色墨盒";}}
package com.qfedu.test6;public interface InkBox {String getInkBoxType();}
package com.qfedu.test6;public interface Paper {String getPaperType();}
package com.qfedu.test6;public class A4 implements Paper{@Overridepublic String getPaperType() {return "A4";}}
package com.qfedu.test6;public class B5 implements Paper{@Overridepublic String getPaperType() {return "B5";}}
package com.qfedu.test6;public class Test {public static void main(String[] args) {Printer hp = new Printer();InkBox black = new BlackInkBox();InkBox color = new ColorInkBox();hp.setInkBox(color);Paper a4 = new A4();Paper b5 = new B5();hp.setPaper(b5);hp.print();}}
