corejava学习3(接口)

xiaoxiao2026-03-16  6

 

Interface(接口)

Interface是一个特殊的抽象类

Interface 里面的常量都是publicstaticfinal

里面的方法都是公开的抽象的。(publicabstract

一个源文件可以有多个接口和类,但只能一个公开的接口或类。

 

接口不能创建对象,但是可以声明一个接口类型的引用

接口存在的意义是被子类实现,用关键字implements

如果不想让子类也抽象,就要实现接口里面的所有抽象方法。

 

接口是用来被实现的(implements

抽象类是用来被继承(extends)。

实现过程中注意访问权限。

 

接口之间可以继承。接口可以多继承。接口本身支持多继承,继承了父接口里功能的定义。

类可以既继承一个父类又实现多个接口

接口没有构造方法,不能创建对象。

 

接口作用:

1、多继承

接口是对类的共性进行再次抽象,抽象出类的副类型。

因为接口 次要类型,所以在类关系里不占一个节点,不会破坏类层次关系的树状结构

Class  ee extends dd implements aa

 

2、标准(弱耦合)

一个接口就是一个标准

接口将标准的制定者,标准的实现者以及标准的使用者分离开,降低实现者和使用者的耦合。

接口是java中一种重要的降低耦合的工具。

 

接口可以屏蔽不同实现类的差异,当底层的实现尖更换后,不会对上层的使用者产生影响,体现在参数和返回值

 

 

――――――――――――――――――――――――――――――――――――

 

1. 接口回调:

       先定义接口,然后先有使用者,再有实现者。

       利用参数把实现者传给使用者,

       使用者利用接口调用实现者里面相应的功能。

       public class TestCallBack {

       public static void main(String[] args){

              Glass glass = new RedGlass();

              //Glass glass = new BlueGlass();

              Lamp lamp = new Lamp(glass);

              lamp.powerOn();

       }

}

interface Glass {

       public void lightOn();

}

class RedGlass implements Glass {

       public void lightOn(){

              System.out.println("this red glass light!");

       }

}

class BlueGlass implements Glass {

       public void lightOn(){

              System.out.println("this blue glass light!");

       }

}

class Lamp {

       Glass glass;

       public Lamp(Glass glass){

              this.glass = glass;

       }

       public void powerOn() {

              glass.lightOn();

       }

}

 

2. Object Java里所有类的直接或者间接父类。

       //class Animal extends Object{}

       //class Dog extends Animal{}

       Object 类里面的所有的功能是所有Java类共有的。

       Object 只有共有的功能没有共有的属性。

       1finalize():protected void

                     JVM调用垃圾回收器回收不用的内存前运行该方法。

                     不用的内存就是没有引用指向的对象。

                     JVM是做最少回收,不到万不得已,不启动垃圾回收,

                     尽可能的减少回收次数。

                     不要在finalize()中释放资源。

                     System.gc() <====> Runtime.getRuntime().gc()

                     以上方法是告诉JVM调用垃圾回收器回收不用的内存,

                     到底什么时候回收还是得看JVM。该方法不是强行调用垃圾回收。“回不回收要看虚拟机高不高兴了,不是一定会回收内存”。

       String str=new String(“abc”);

 

2toString():返回对象的字符串表现形式。

                     打印对象时,虚拟机自动调用toString()获取对象的字符串表现格式,

                     如果本类不提供(即覆盖)toString(),那么使用的是Object类里的相应方法,

                     打印的就是地址。

1)  equals(Object obj):返回boolean类型

      equals的方法。(对象为null,同一对象,)

                     ==是判断变量本身的值是否相等,引用类型数据判断的是地址。

                     equals判断的是对象内容是否相等。

                     对于自己的类,应该覆盖equals()

                     覆盖时遵循的原则:

                     ①自反性: a.equals(a) == true;

                     ②对称性: a.equals(b) == b.equals(a) -----> true

                     ③传递性: a.equals(b) ----> true

                                                   b.equals(c) ----> true

                                                  a.equals(c) ----> true

      

 

String str1=”hello”   //放在字符串池中

String str2=new String(“hello”)// 分配一个新的内存空间。

public class TestString{//字符串是放在字符串池中的,用的时候去字符串池中找,

                                                       //不用的时候JVM会去字符串池销毁

   public static void main(String[] args){

      // String str1="Hello";

      // String str2="Hello";

       String str3=new String("Hello");//产生两个字符串对象,new和“”产生的,

                                        //字符串池里有一个字符串对象是由""产生的

       String str4=new String("Hello");//跟上边的一共产生三个字符串对象

                                                                           //hello是去字符串池找的

      // System.out.println(str1==str2);  

       //System.out.println(str1.equals(str2));

       //System.out.println(str3==str4);

       //System.out.println(str3.equals(str4)); 

       String str5=new String("Hello");

       String str6=str5;

       str5+="World";

       System.out.println(str5);

       System.out.println(str6);

       //String字符串空间一旦分配,是不能改变的,如果想改,只能新建空间

       /*************************

       ***String str7 = "";

       ****for(int i = 1;i <= 100;i++){

       ****   str7 = str7+i+",";

       ****}

       *************************/

       //StringBuilder   StringBuffer都表示字符串,这两个字符串空间是可以改的

               /*StringBuilder sb = new StringBuilder("Hello");

               sb.append(",");*/

   }

 

类名.方法

System.gc();

System.out.   ;

 

对象.变量

s.name

s.eat();

Package com.kettas.common

 

==equals

1基本类型数据 :==(比值)

2引用类型数据:

 == :比的是引用(地址)

 Equals():如果覆盖了equals,比的是对象的内容

        如果没有覆盖使用object类里的equals(),比的是地址。

 

 

 

String str2=”1234”;

Int i4=Intger.parseInt(str2);

 

 

String str3=Interger.toString(i4);

String str4=i4+””;

转载请注明原文地址: https://www.6miu.com/read-5046007.html

最新回复(0)