跟日记本一起学JAVA!相信你可以的,加油~
本课闯关内容:1.照猫画虎(0/5)
2.基础知识(0/2)
这里的基础知识的编号与照猫画虎的编号不是对应的,而是上面的基础知识对应着下面的照猫画虎代码。
有补充或者有错误我会在评论区里发或...
建议你们在电脑上看。
———————————————————————————————————————————
一、接口
概念 :
二、实现类
1.语法: class 类名 implements 接口名{}
2.注意:实现类实现接口,如果实现类不想成为抽象类,则需要实现(覆盖)接口中所有的方法;实现类实现接口中的方法时,方法的访问修饰符必须是 public 的访问权限。
3.应用(语法):接口名 引用名 = new 实现类类名(实参);
注意:接口类型的引用指向 实现类的对象,多态的应用。-->强制使用多态
package 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 a=9;//默认为:公开静态常量,静态属性
int b=3;//默认被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...");
}
}
输出:
9
3
ma...
mb...
三、接口的继承性
四、接口多继承的影响
1. 如果引用之间相互强制类型转换,转换的一方为接口类型的引用,则编译一定通过,但是运行的时候分以下两种情况:
(1)引用中实际存储的对象类型 和 要转换的类型一致,则运行通过
(2)引用中实际存储的对象类型 和 要转换的类型不一致,则运行报错,错误信息为: java.lang.ClassCastException(类型转换异常)
五、接口的作用
六、接口的回调
总结:接口和抽象类的区别?
接口 抽象类
关键字 interface abstract class
属性 公开、静态、常量 没有要求(实例变量+静态变量+对final没有要求) public static final
方法: 公开、抽象方法 抽象方法+非抽象方法
public abstract
构造方法: 没有 有构造方法
继承关系: 多继承 单继承
Java 中的 final(final修饰变量时为常量)
1.修饰变量:表示不可重新赋值(常量)。
代码:
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 编译错误!不可修改
2.修饰类:类不能被继承。
代码:
final class ImmutableClass { /*...*/ }
// class Child extends ImmutableClass {} // 编译错误!
3.修饰方法:方法不能被子类重写。
重点:
final变量如果是基本类型(int,float...),值不可变;如果是对象,引用不可变(但对象内部状态可能可变,除非类本身不可变,如 String)。
package 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....
package 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...方法实现...
package 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 a+b;
}
public void mb(){
System.out.println("mb实现");
}
}
输出:
mb实现
8
interface 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中的较大值是: 75
60和45的和是否大于100: true
30和40的和是否大于100: false
跟我一步步学,慢慢走。
未完待续。。。