首页 > 编程语言 >[Java面向对象]

[Java面向对象]

时间:2024-07-09 19:31:15浏览次数:14  
标签:Java 实现 接口 面向对象 默认 静态方法 方法 public

面向对象

修饰符

接口

接口中方法的访问修饰符默认是public abstract

在 Java 接口中,接口中的方法默认是公共的(public),且不允许使用其他的访问修饰符。接口中定义的方法会被隐式地指定为 public abstract,这两个修饰符可以省略,因为它们是默认的。

所以,Java 接口中方法的定义形式通常是:

public interface MyInterface {
    void myMethod(); // 隐式的 public abstract
}

在 Java 8 及之后的版本中,接口还引入了默认方法(default methods)和静态方法(static methods)。这两种方法可以包含方法体,而不仅仅是声明。这两种方法的访问修饰符分别是:

  1. 默认方法(Default Methods):

    • 默认方法使用 default 关键字进行声明,它们在接口中有一个默认的实现。默认方法可以被接口的实现类继承或者覆盖。
    public interface MyInterface {
        default void myDefaultMethod() {
            // 默认方法的实现
        }
    }
    
  2. 静态方法(Static Methods):

    • 静态方法使用 static 关键字进行声明,它们在接口中有一个静态的实现。静态方法可以直接通过接口名调用,不需要通过实现类的实例调用。
    public interface MyInterface {
        static void myStaticMethod() {
            // 静态方法的实现
        }
    }
    

总结起来,Java 接口中方法的访问修饰符默认是 public abstract,但对于默认方法和静态方法,可以使用 defaultstatic 关键字进行修饰。默认方法和静态方法的引入使得接口可以包含一些具体的实现,而不仅仅是抽象方法。

实现接口的类,重写接口中的方法时,应该将访问修饰符定为public

当一个类实现一个接口时,类需要遵循以下访问修饰符的要求:

  1. 接口方法实现:
  • 实现类必须提供接口中定义的所有方法的实现,包括默认方法。如果不提供全部方法的实现,那么该类必须声明为抽象类(abstract)。
  1. 接口方法的访问修饰符:

    • 实现类中的方法必须使用 public 访问修饰符,因为接口中的方法默认是 public 的。如果使用其他访问修饰符(例如 protectedprivate),会导致编译错误。
    public class MyClass implements MyInterface {
        public void myMethod() {
            // 实现接口方法
        }
    
        // 实现默认方法
        public void myDefaultMethod() {
            // 默认方法的实现
        }
    }
    
  2. 接口中静态方法的访问:

    • 静态方法可以通过接口名直接调用,不需要实现类提供具体实现。实现类可以选择提供一个相同签名的静态方法,但这只是一个静态方法而不是接口中的静态方法的实现。
    public class MyClass implements MyInterface {
        public void myMethod() {
            // 实现接口方法
        }
    
        // 实现默认方法
        public void myDefaultMethod() {
            // 默认方法的实现
        }
    
        // 提供一个静态方法,但不是接口中的静态方法的实现
        public static void myStaticMethod() {
            // 静态方法的实现
        }
    }
    

总体来说,实现类中实现接口的方法需要使用 public 访问修饰符,并提供接口中所有抽象方法的具体实现。对于默认方法和静态方法,可以选择性地提供实现。

抽象类和接口的区别

  1. 抽象类用来继承,接口用来实现,定义规范

  2. 抽象类用来规定对象长什么样子,但是接口用来规定对象有什么行为。

  3. 接口中的成员变量只能是public static final类型的,静态方法和默认方法只能是public或private访问级别,抽象方法只能是public访问级别。

  4. 抽象类中可以定义各种类型的成员变量,并且成员方法可以处于四种访问级别。这是抽象类的优势所在,它可以包含所有子类的共同实例变量,避免在子类中重复定义,而且抽象类可以利用四种访问级别来灵活地设定对实现细节的封装程度。

  5. 一个类只能继承一个直接的父类;但一个类可以实现多个接口,这是接口的优势所在,也就是我们可以利用接口实现多继承。

    对于已经存在的[继承树],由于一个类允许实现多个接口,因此可以方便地从类中自下而上抽象出新的接口。另一方面,由于一个类只能继承一个直接的[父类],因此从类中自下而上抽象出新的抽象类却不那么容易。所以接口更有利于软件系统的维护与重构。

    从语义上有区分,接口是对多个类的共同行为(或者说对外提供的服务)的抽象,抽象类是对根据多个类的共性(包括属性和行为)进行的类型抽象。

(1)接口是软件系统中最高层次的抽象,声明了软件系统对外提供的服务。

(2)接口本身必须十分稳定,接口一旦制定,就不允许随意修改,否则会对接口的实现类以及接口的访问类都造成影响。

(3)通常用抽象类来定制软件系统中的扩展点。可以把抽象类看作是介于“抽象”和“实现”之间的半成品,抽象类力所能及地完成了部分实现细节,但还有一些功能有待于它的子类去实现和扩展。

我之前写过一个项目,我需要一个抽象的缓存框架,其中就用到了抽象类,这个抽象类本身就带有三个hashmap,所以我们只需要继承这个类就可以直接使用这三个hashmap,

标签:Java,实现,接口,面向对象,默认,静态方法,方法,public
From: https://www.cnblogs.com/DCFV/p/18292603

相关文章

  • [Java基础]
    数据类型Java的数据类型包括基本数据类型和引用数据类型:基本数据类型:整形:byte,short,int,long浮点型:float,double字符型:char布尔型:boolean引用数据类型:class,interface,array。引用拷贝,浅拷贝,深拷贝引用拷贝在Java中,对象的引用拷贝是指将一个对象的引......
  • [Java基础]反射
    反射获取任意对象的数据对对象一无所知的情况下publicclassStudent{privateStringname;privateIntegerage;publicStudent(Stringname,Integerage){this.name=name;this.age=age;}publicStringgetName(){......
  • [Java并发]Lock
    锁锁的分类公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先......
  • [Java并发]IO多路复用
    IOIO多路复用BIONIOselectpollepoll水平触发和边沿触发水平触发只关心文件描述符中是否还有没完成处理的数据,如果有,不管怎样epoll_wait,总是会被返回。简单说——水平触发代表了一种“状态”。边沿触发只关心文件描述符是否有新的事件产生,如果有,则返回;如果返回过一次,......
  • [Java面试]经典手撕
    多线程循环打印ABC方法一:packageorg.example;importjava.util.TreeMap;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassPrintABC{ReentrantLocklock=newReentrantLock();Conditiona=lo......
  • [Java基础]HashMap
    HashMapHashMap的数据结构HashMap是:数组+链表/红黑树(JDK1.8增加了红黑树部分)数据底层具体存储的是什么?Node<k,v>这样的存储方式有什么优点呢?数据结构//默认初始容量(数组默认大小):16,2的整数次方staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//最大......
  • java day1
    简单了解了java,他最大的特点就是,稳定,安全,可以解决高并发的访问,最大的优势.java分es,ee,me.java的强势之处在于javaee,我是从javase开始学的.2.安装JDk,我装的是JDK17,据说当前市场大多数用的都是JDK8,17在未来可能会占据更大市场.17也是长期支持版.安装步骤(1)访问甲骨文......
  • [Java并发]Synchronized
    publicclassAtomicTest01{publicstaticinti=0;publicstaticvoidmain(String[]args){Runnabletask=newRunnable(){@Overridepublicvoidrun(){synchronized(this){tr......
  • Java爬虫翻页
    编写一个Java爬虫以进行翻页通常涉及到使用HTTP客户端(如ApacheHttpClient或OkHttp)来发送请求,解析HTML页面(如使用Jsoup库),以及处理分页逻辑(如通过URL参数或页面内的链接进行翻页)。1.使用Jsoup和ApacheHttpClient的Java爬虫示例以下是一个使用Jsoup和ApacheHttpClient的Java爬......
  • Java volatile 深度解析
    简介被volatile修饰的变量有两大特点:当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值立即刷新回主内存中。当读一个volatile变量时,JMM会把线程对应的本地内存设置为无效,需要工作线程重新回到主内存中读取最新共享变量。所以volatile的写的内存语......