ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

JAVA第十一课

JAVA第十一课 跟日记本一起学JAVA相信你可以的加油~本课闯关内容1.照猫画虎0/52.基础知识(0/2这里的基础知识的编号与照猫画虎的编号不是对应的而是上面的基础知识对应着下面的照猫画虎代码。有补充或者有错误我会在评论区里发或...建议你们在电脑上看。———————————————————————————————————————————基础知识1一、接口概念 :接口是一种标准、规范是接口的实现者和接口的使用者都必须遵循的约定。接口的语法规则:1接口的关键字:interface interface接口{}2接口编译之后会生成独立的.class文件3接口不能创建对象但是可以声明引用4接口中的属性都是公开、静态、常量(默认的被public static final修饰)5接口中的方法都是公开、抽象方法(默认的被public abstract修饰)6接口中没有构造方法注意接口不是类。二、实现类1.语法class类名implements接口名{}2.注意实现类实现接口如果实现类不想成为抽象类则需要实现(覆盖)接口中所有的方法实现类实现接口中的方法时方法的访问修饰符必须是public的访问权限。3.应用语法接口名引用名 new实现类类名(实参);注意接口类型的引用指向实现类的对象多态的应用。--强制使用多态照猫画虎1package demo; public class Test1{ public static void main(String[]args){ System.out.println(MyInter.a); System.out.println(MyInter.b); MyInter mi new MyClass(); //接口 引用 实现类对象 //父类型 子类型 --多态 mi.ma(); mi.mb(); } } //接口 interface MyInter{ public static final int a9;//默认为公开静态常量静态属性 int b3;//默认被public static final修饰 public abstract void ma();//默认为公开抽象方法 void mb();//默认被public abstract } //实现类如果不想成为抽象类则需要覆盖接口中的所有抽象方法 class MyClass implements MyInter{ public void ma(){ System.out.println(ma...); } public void mb(){ System.out.println(mb...); } }输出93ma...mb...基础知识2三、接口的继承性Java中的接口之间的继承关系是多继承一个接口可以有多个父接口1语法interface接口名extends父接口1,父接口2{}类和接口之间是多实现的关系一个类可以同时实现多个接口1语法class类名implements接口名1,接口2{}2)注意一个类同时实现多个接口如果这个类不想成为抽象类则必须实现所有接口中所有方法而且每一个方法的访问修饰符都是public一个类继承一个父类的同时可以实现多个接口(1)语法class类名extends父类名implements接口名1,接口名2{}(2)注意必须是先继承后实现。(单继承多实现)四、接口多继承的影响1.如果引用之间相互强制类型转换转换的一方为接口类型的引用则编译一定通过但是运行的时候分以下两种情况(1)引用中实际存储的对象类型和要转换的类型一致则运行通过(2)引用中实际存储的对象类型和要转换的类型不一致则运行报错错误信息为java.lang.ClassCastException(类型转换异常)五、接口的作用可以扩充子类的能力(1)由于Java中类之间是单继承当子类从父类中继承功能方法不足以满足子类功能需求时可以借助接口扩充子类的能力。(2)通常将主要功能定义在父类中次要的功能(扩展的功能)定义在接口中。降低程序中的耦合度接口定义好之后将接口的实现者和接口的使用者分离借助多态降低各模块之间的耦合度。六、接口的回调接口回调接口定义之后先有接口的使用者再有接口的实现者。注意遇到接口回调的应用开发人员需要关注的是根据接口规范给予接口的实现部分。总结接口和抽象类的区别接口抽象类关键字 interface abstract class属性公开、静态、常量没有要求(实例变量静态变量对final没有要求)publicstaticfinal方法公开、抽象方法抽象方法非抽象方法publicabstract构造方法没有有构造方法继承关系多继承单继承Java 中的 finalfinal修饰变量时为常量1.修饰变量表示不可重新赋值常量。代码final int MAX_VALUE 100;// MAX_VALUE 200; // 编译错误不可修改2.修饰类类不能被继承。代码final class ImmutableClass { /*...*/ }// class Child extends ImmutableClass {} // 编译错误3.修饰方法方法不能被子类重写。重点final变量如果是基本类型int,float...值不可变如果是对象引用不可变但对象内部状态可能可变除非类本身不可变如 String。照猫画虎2package demo; public class Test2{ public static void main(String[]args){ ClassA ca new ClassA(); IA ia ca; ia.m1(); } } interface IA{ public void m1(); } interface IB{ public void m2(); } //java中的接口与接口之间为多继承类与类之间为单继承 interface IC extends IA,IB{ public void m3(); } interface ID{ public void m4(); } //类与接口为多实现一个类可以同时实现多个接口--一个类实现 class ClassA extends MyClass implements IC,ID{ public void m1(){ System.out.println(m1....); } public void m2(){} public void m3(){} public void m4(){} } class MyClass{ public void m5(){} }输出m1....照猫画虎3package demo; public class Test1{ public static void main(String[]args){ IA.mc(); //IA.mc(); IA ia new ClassA(); ia.mb(); } } interface IA{ void ma(); public default void mb(){ System.out.println(mb...方法实现...); } public static void mc{ System.out.println(mc...方法的实现...静态方法...); } } class ClassA implements IA{ public void ma(){}//抽象方法的覆盖变为实现方法因为要引用对象要为实现类 }输出mc...方法的实现...静态方法...mb...方法实现...照猫画虎4package demo; public class TestMyClass{ public static void main(String[]args){ MyInter mi new MyInterImpl(); int sum mi.ma (5,3); mi.mb(); System.out.println(mi.ma(5,3)); } } interface MyInter{ public int ma(int a,int b); public void mb(); } class MyInterImpl implements MyInter{ public int ma(int a,int b){ return ab; } public void mb(){ System.out.println(mb实现); } }输出mb实现8照猫画虎5interface MathTool { long intPower(int m, int n); boolean findFactor(int m, int n); } class MathToolImpl implements MathTool { public long intPower(int m, int n) { return Math.max(m, n); } public boolean findFactor(int m, int n) { return (m n) 100; } } public class TestMyClass1{ public static void main(String[] args) { MathTool mathTool new MathToolImpl(); int num1 50, num2 75; long max mathTool.intPower(num1, num2); System.out.println(num1 和 num2 中的较大值是: max); int a 60, b 45; boolean result mathTool.findFactor(a, b); System.out.println(a 和 b 的和是否大于100: result); int c 30, d 40; boolean result2 mathTool.findFactor(c, d); System.out.println(c 和 d 的和是否大于100: result2); } }输出50和75中的较大值是: 7560和45的和是否大于100: true30和40的和是否大于100: false跟我一步步学慢慢走。未完待续。。。
返回列表