美文网首页饥人谷技术博客
面向对象:抽象类,接口,内部类

面向对象:抽象类,接口,内部类

作者: _Jun | 来源:发表于2020-11-20 11:17 被阅读0次

抽象类:


抽象类的概念:

Java中可以定义没有方法体的方法,方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类;

通常在编程语句中用 abstract 修饰的类是抽象类。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

抽象类的特点:

1)抽象类和抽象方法必须用关键字abstract修饰
2)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
3)抽象类不能实例化

语法格式:

修饰符 abstract 返回值类型 方法名([参数列表]);

[public] abstract class ClassName {
    //可以定义类所有的内容
    //可以定义接口中所有的内容
}

抽象类的声明:

语法:修饰符 abstract class 类名 extends 父类名
抽象类中可以没有抽象方法;但是一旦某个有抽象方法,那么这个类必须被声明为抽象类。

抽象类和普通类的主要区别:

1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

接口:


接口(interface),在软件工程中,接口泛指供别人调用的方法或者函数。

语法:修饰符 interface 接口名{[常量];[抽象方法];}

[public] interface 接口名{
     //定义常量
     public static final 数据类型 常量名 = 值;
     //定义抽象方法
     public abstract 返回值类型  方法名(数据类型 参数名,...);
}

接口中抽象方法可以不写abstract关键字,访问修饰符默认public
接口中所有的方法不能有具体的实现,当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类;
接口中可以包含常量,默认public static final
接口也可以实现继承,并且可以继承多个父接口

抽象类和接口的相似:

1)不能实例化;
2)包含未实现的方法声明;
3)派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

抽象类和接口的区别:

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。

内部类:


定义在其他类内部的类。

内部类可以分为:

1)成员内部类:

  • 定义在外部类的成员(属性、方法)位置
  • 可以使用四种访问权限修饰符修饰内部类
  • 可以在内部类的内部定义属性和方法
    例:
public class Outer {
    private int a = 1;
    //成员内部类
    class Inner{
        public void print(){
            //可以访问外部类的私有属性
            System.out.println(a);
        }
    }
}

创建内部类对象:先要创建外部类对象,然后使用外部类对象创建内部类对象

//创建外部类对象
Outer out = new Outer();
//创建内部类对象
Outer.Inner in = out.new Inner();
in.print();

2)静态内部类:

  • 静态内部类是在内部类前面加上static

  • 静态内部类不需要创建外部对象

  • 只能访问外部类静态的属性或方法

  • 访问静态内部类当中的静态成员:Outter.Inner.color
    例:

    public class Outer {
        private int a = 1;
        private static int b = 2;
        //静态内部类
        class static class Inner{
            public void print(){
                //只能访问静态属性
                System.out.println(b);
            }
        }
    }
    

3)局部内部类:

  • 局部内部类只能定义在方法当中使用

  • 局部内部类当中是不能包含静态变量

  • 局部内部类当中可以包含局部变量,使用的局部变量的本质是final变量
    例:

    public class Outer {
        private int a = 1;
        private void print(final int b){
        //局部内部类
        class Inner{
            public void print(){
                System.out.println(a);
                System.out.println(b);
                }
            }
        }
     }
    

4)匿名内部类:(属于局部内部的一种特殊情况)

  • 匿名内部类不知道类名,所以不能定义构造方法,只能使用默认无参的构造方法。
  • 只使用一次的时候,就使用匿名内部类
  • 匿名内部类必须知道它的父类或实现的接口

使用内部类的意义:

1)增强封装,把内部类隐藏在外部类当中,不允许其他类访问这个内部类
2)增加了代码一个维护性
3)内部类可以直接访问外部类当中的成员

相关文章

  • 面向对象总结

    面向对象思想 类与对象 定义类格式: 面向对象的三大特征 封装 继承 多态: 抽象类 接口 内部类 匿名内部类: ...

  • Java基础知识整理

    大纲 面向对象 关于Object类 重要关键字 内部类 抽象类与接口 编码 异常 一. 面向对象 1. 关于面向对...

  • java面向对象笔记

    面向对象三要素 抽象 接口 面向对象(局部内部类访问局部变量的问题) 匿名内部类

  • Java&Android 基础知识梳理(0) - Jav

    Java 基础知识大纲 一、面向对象 二、Object类相关 三、重要关键字 四、内部类 五、抽象类 & 接口 六...

  • 面向对象:抽象类,接口,内部类

    抽象类: 抽象类的概念: Java中可以定义没有方法体的方法,方法的具体实现由子类完成,该方法称为抽象方法,包含抽...

  • Java 抽象类与接口

    接口和内部类未我们提供了一种将接口与实现分离的更加结构化的方法 抽象类 描述 面向对象的领域一切都是对象,通过具体...

  • Kotlin入门学习(二)

    新的篇章 面向对象 面向对象-封装 面向对象-继承 面向对象-抽象类和多态 接口 委托和代理 by关键字 委托...

  • Java抽象类 & 接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类我们都知道在面向对象的领域一切都是对象,同...

  • 每日一点(1)

    匿名类 内部类 匿名内部类 匿名类(可以是接口 抽象类 普通类):1:无需创建对象2:直接重写方法 内部类:若一...

  • 16. 对象声明与伴生对象

    匿名内部类 匿名内部类主要是针对那些获取抽象类或者接口对象而来的。最常见的匿名内部类点击事件: 上面这个是Java...

网友评论

    本文标题:面向对象:抽象类,接口,内部类

    本文链接:https://www.haomeiwen.com/subject/pwldiktx.html