面向对象---抽象方法、抽象类、接口和枚举、内部类、注解

本文详细介绍了Java中的抽象方法、抽象类及其关系,接口与抽象类的区别,以及内部类的四种类型和使用方式。同时,探讨了枚举类型的概念、常用方法以及实现接口的方式。最后,讲解了注解的基本概念、格式,以及元注解的作用。
摘要由CSDN通过智能技术生成

抽象方法

概念

抽象->具体

  • 抽象方法主要指不能具体实现的方法并且使用 abstract 关键字修饰,没有方法体

  • 格式

       //访问权限 abstract 返回值类型 方法名 (形参列表);
       public abstract void cry(); 
    

抽象类

概念

  • 主要指不能具体实例化的类 并且使用 abstract 关键字修饰,也就是不能创建对象

    public abstract class AbstractTest{
         
        public abstract void cry(); 
    }
    
    

抽象类和抽象方法的关系

  • 抽象类中可以有 成员变量、构造方法、成员方法
  • 抽象类中可以有抽象方法,也可以没有抽象方法
  • 拥有抽象方法的类必须是抽象类, 因此真正意义上的抽象类应该是具有抽象方法并且使用abstract关键字修饰的类
    • 如果一个抽象类中没有抽象方法,那么抽象类 不能创建对象 的特性毫无意义

抽象类的实际意义

  • 抽象类的意义不在于创建对象而在于被继承
  • 当一个类继承抽象类后必须重写抽象方法,否则该类也必须为抽象类
    • 抽象类对子类具有强制性和规范性,因此又叫做 模板设计模式

接口

概念

  • 接口就是一种比抽象类还抽象的类

    • 所有的方法都为抽象方法
  • // interface 关键字
    public interface InterfaceTest {
         
        public abstract void cry();
    
        public abstract void show();
    }
    
    

类、接口、抽象类之间的关系

名称 关键字 关系
类和类 extends–表达继承关系 支持单继承
类和接口 implements–表达实现关系 支持多实现
接口和接口 extends表达继承关系 支持多继承

接口和抽象类的区别

接口 抽象类
定义的关键字 abstract class interface
继承/实现的关键字 extends implements
继承/实现要求 单继承 多实现
构造方法 可以有 不可以有
成员变量 可以有 只能是常量
成员方法 可以有 只能是抽象方法
增加方法时 可以不重写 需要重写(java8之前)
 - 从java8开始增加新特性: 接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰 
 - 从java9开始增加新特性,接口中允许出现私有方法

内部类

概念

  • 当一个类的定义出现在另外一个类的类体时,那么这个类就叫做内部类(Inner),而这个内部类所在的类叫做外部类(Outer)

实际作用

  • 当一个类存在的价值仅仅是为某一个类单独服务时,那么就可以将这个类定义为所服务类中的内部类
  • 这样就可以隐藏该类的实现细节并且可以方便的访问外部类的私有成员而不再需要提供公有的get、set方法

1.普通(成员)内部类

  • 直接将一个类的定义放在另一类的类体中
访问修饰符 class 外部类的类名{
   
    访问修饰符 class 内部类的类名{
   
        内部类的类体;
    }
}
//普通内部类
public class NormalClass {
   
    public class ClassInner {
   
        private int ia = 1;
        //普通内部类
        public ClassInner() {
   
            System.out.println("普通内部类的构造方法");
        }

        public void show() {
   
            System.out.println("普通内部类的show()");
            System.out.println("普通内部类的 ia = " + ia);
        }
    }
}
// 普通内部类测试类
public class NormalClassTest {
   
    public static void main(String[] args) {
   
        //声明 NormalCla
        NormalClass nc = new NormalClass();

        NormalClass.ClassInner inner = nc.new ClassInner();
        inner.show();
    }
}

运行结果:

使用方式

  • 普通内部类和普通类一样可以定义成员变量、成员方法、构造方法等

  • 普通内部类和普通类一样可以使用finalabstract关键字修饰

  • 普通内部类可以使用privateprotected关键字修饰

  • 普通内部类需要使用外部类对象来创建对象

    • 如果内部类访问外部类中与本类内部同名的成员方法变量或方法时,需要使用this关键字
    public class NormalClass {
         
       private int outer = 1;
       //普通内部类
       public class ClassInner {
         
           private int outer = 2;
           public ClassInner() {
         
               System.out.println("普通内部类的构造方法");
           }
           public void show() {
         
               System.out.println("普通内部类的show()");
               System.out.println("普通内部类的 ia = ");
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地三千

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值