接口中的默认方法可以解决接口升级的问题
格式:
直接方式:外.内
这两个关键字修饰符可以省略;
运行结果:
publicdefault返回值类型方法名称{//方法体}
接下来我们把第二个例子用代码来实现一下
public abstract class Animal {
String name;
int age;
public abstract void eat();
}
public class Cat extends Animal{
@Override
//重写了父类的抽象方法eat()
public void eat() {
System.out.println(name+'吃????');
}
}
public class Dog extends Animal{
@Override
//重写了父类的抽象方法eat()
public void eat() {
System.out.println(name+'吃骨头');
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = '旺财';
Cat cat = new Cat();
cat.name = '小白';
dog.eat();
cat.eat();
}
}
外部类名称.内部类名称对象名=new外部类名称.new内部类名称
如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
格式:
publicclass实现类名称implements接口A,接口B{//覆盖重写了所有接口的抽象方法}
在上面这幅中,正方形,三角形,圆形类都是形类的子类,当我们发出形应该如何计算面积时,我们知道对于不同的形我们有不同的计算面积的方法,而计算形面积的方法就是一个抽象方法,
静态方法一般使用接口名称.方法名称来调用。不能提供接口实现类的对象来调用接口当中的静态方法。
根据内部类定义的位置不同,一般可以分为一下几种形式:
定义接口的格式:
实现类可以覆盖重写接口的默认方法。
publicinterface接口名称{//接口内容}
接口名称对象名=new接口名称{
接口中也可以定义类似于成员变量的常量,但是必须使用publicstaticfinal三个关键字进行修饰。从效果上来看,这就是接口的常量。
一个类如果直接父类当中的方法和接口当中的默认方法产生了冲突,则优先用父类当中的方法,这是因为
//覆盖重写所有的抽象方法
抽象方法就是加上abstract关键字然后去掉大括号直接分号结束的方法。
publicabstract返回值类型方法名称;
格式:
抽象类的子类必须重写抽象父类中的所有抽象方法否则编译无法通过而报错,除非该子类也是抽象类。
直接在对象中调用默认方法,如果实现类中没有,会向上找接口的默认方法。
方法的三要素可以随意定义。
什么是内部类?
抽象类中不一定含有抽象方法,但含有抽象方法的类一定是抽象类;
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是一个抽象类。比如:
从Java8开始,接口里允许定义默认方法
在使用接口时需要注意:
抽象类中可以有构造方法,是供子类创建对象时,初始化父类成员使用的;
一个接口表示“所有实现了该特定接口的类看起来都像这样。简单理解就是接口就是一种公共的规范标准,只要符合规范标准,就可大家通用,而接口是一种引用数据类型,最重要的内容就是其中的抽象方法。
接口
抽象类不能创建对象,如果创建则编译无法通过而报错。只能创建其非抽象类子类的对象;
什么是抽象类?
如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类必须是一个抽象类;
接口中的常量可以省略publicstaticfinal,不写也默认是这样,接口中的常量必须进行赋值,不能不赋值,在访问接口中的常量时,我们使用接口名称.常量名称的方式来访问,在对其命名时,我们推荐使用完全大写的字母,用下划线进行分割。
从Java8开始,接口中允许定义静态方法
生成的.class文件为外部类名称$内部类名称.class
间接方式:在外部类的方法中,使用内部类,然后在main方法中调用外部类的方法。
如何使用抽象类?
但是需要注意的是:
比如:
格式:
接口中定义常量
什么是接口?
如何使用成员内部类?
使用抽象类的意义
抽象方法所在的类必须是抽象类才行,在class之前写上abstract即可。
使用方式:
abstract关键字允许人们在类中创建一个或者多个没有任何定义的方法——提供了接口部分,但是没有提供任何相应的具体实现,而这些实现是由此类的继承者创建的。interface这个关键字产生一个完全抽象的类,它根本没有提供任何具体的实现。它允许创建者自己确定方法名,参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现。
成员内部类
格式为:
public class Outclass {
public class InnerClass1{
}
//未被static修饰的成员内部类...............普通内部类
static class InnerClass2{
}
//被static修饰 ————————————>静态内部类
public void method(){
class InnerClass3{
}
//方法中定义内部类 ————————>局部内部类
}
}
public class Outclass {
public class InnerClass1{
}
//未被static修饰的成员内部类...............普通内部类
static class InnerClass2{
}
//被static修饰 ————————————>静态内部类
public void method(){
class InnerClass3{
}
//方法中定义内部类 ————————>局部内部类
}
}
接口中不能有静态代码块和构造方法;
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。在Java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。
publicstatic返回值类型方法名称{//方法体}
注意事项:
一个类的直接父类是唯一的,但是一个类可以实现多个接口;
例如:
如果实现类实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写;
使用抽象类其实相当于多了一重编译器的校验,使用抽象类的情景就像上述代码一样,实际工作不应该由父类完成而是应该由子类来完成,那么此时如果不小心无用成父类了,很多普通类的编译器时不会报错的,但是父类是抽象类就会在实例化的时候提示错误,让我们今早发现问题。
publicstaticfinal数据类型常量名称=数据值;
接口当中的抽象方法修饰符必须是两个固定的关键字:publicabstract;
在任何版本的java中接口都能定义抽象方法。
内部类
再例如:
格式:
抽象类的使用方法:不能直接创建抽象类对象,得具体才行必须用一个子类来继承抽象类父类子类必须覆盖重写父类的所有抽象方法创建子类对象来使用
如何使用接口
文章为作者独立观点,不代表股票交易接口观点