接口、object类、内部类

一、接口

  • 接口语法
1.把类的class替换成interface------>接口
2.接口中的成员变量,默认必须用public static final修饰,可以省略不写。
3.接口中的方法都是默认必须使用public abstract修饰,可以省略不写。
接口=常量(public static final)+抽象方法(public abstract)
4.接口不能被实例化对象
5.接口中没有构造函数
6.实现类实现接口必须重写接口中所有的抽象方法,除非实现类是抽象类。 接口   和   实现类   使用implements连接
7.public interface demo{}
public class test implements demo{}
8.一个实现类可以有多个接口
9.一个类继承另一个类的同时,可以有多个接口
public class A extends B implements C,D{}
10.接口打破单继承,一个接口可以继承多个接口
public interfacce C extends A,B{}
11.类与类之间用extends 接口与类之间用implements,接口与接口之间用extends
12.类与类之间强调的是从属关系,接口与接口之间强调的是功能。
13.接口可以使用多态
implements +重写+向上转

二、object类

object类是根类(老祖)
  • hashCode()
1.返回值是int类型
2.含义:两个对象的地址相同,则hashCode()返回值哈希值是相等的,若对象的地址不相同,那么哈希值也就不一样。
哈希值:内存地址转换的整数
应用场景:
哈希表(散列表)---->是数据结构
HashMap是集合
HashMap的底层原理是哈希表
哈希表需要hashCode()支持

哈希冲突:重写可能会导致哈希冲突。

  • toString()方法
1.返回值String
2.全限定类名+@+16进制
3.建议重写toString()方法,重写可以输出我们想要的东西
package java学习.Object;

public class ToString1 {
}
//
package java学习.Object;

public class ToString {
    public static void main(String[] args) {
        ToString1 t = new ToString1();
        System.out.println(t);
        System.out.println(t.toString());
    }
}

结果

java学习.Object.ToString1@1b6d3586
java学习.Object.ToString1@1b6d3586

java移位运算的小技巧

  • 左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。

  • 右移一位相当于除以2的一次方,右移n位就相当于除以2的n次方。

  • 机器都是使用补码,运算也是使用补码运算。

  • 正数的原码补码反码都一样。

  • 补码与原码相互转换,其运算过程是相同的。

  • equals()

1.返回值:boolean
2.含义:比较两个对象是否相等,比较的是内存地址。
3.重写!!!!可以改成我们想要的结果
4.==也是比较对象的,equals也是可以比较对象的
==既可以比较基本数据类型,也可以比较引用数据类型。
equals只能比较引用数据类型(对象的引用)
5.instanceof   属于的意思   如:obj instanceof student (判断obj是否属于studnt类)
6.源码
public boolean equals(Object obj){
return this==obj;
}
  • String类的equals(Object obj)
比较两个字符串是否相等,String a1="abc";String a2 = "abc";在常量池中的字符串可以使用"=="比较。但是若是String s1 = new String("abc");
String s2 = new String("abc");  对象s1和s2在堆中存储,所以不要使用"=="比较,这里会比较的是堆的地址,应该用s1.equals(s2)比较。equals只比较的是内容。
s1="ab";
s2="c";
s3=s1+s2;
s4="abc";
s3是s1与s2相加而来,内存不再是常量池里了,而是在堆内。
  • finalize()
    GC垃圾回收机制,GC守护线程
    GC垃圾回收器对对象回收垃圾时,会调用fanalize()方法,只要finalize()方法执行了,标志GC回收对象完成。

三、内部类

  • 实例内部类
1.一个类的类体嵌套另一个类
2.内部类直接调用外部类的属性和方法
3.外部类通过创建内部类对象调用内部类的成员。
4.测试类创建对象调用内部类的成员
外部类.内部类 对象名  = new  外部类().new内部类();
  • 局部内部类
1.局部内部类在方法体中,作用域在方法体中,public不能修饰。
2.局部内部类可以直接调用外部类的属性和方法,但是其他类都不可以调用局部内部类。
3.出了方法体,局部内部类不再起作用。
  • 静态内部类
1.静态内部类只能调用外部类的静态成员!
2.外部类通过内部类名调用内部类的静态成员,内部类类名不可省略。
3.测试类,如果调用的是内部类的静态成员,直接,外部类.内部类.成员  调用
如果调用的额是内部类的非静态成员,创建对象调用
外部类.内部类 对象名=new 外部类.内部类();
  • 匿名内部类
1. 匿名内部类属于特殊局部内部类,存在方法中,并且只有类体,没有名字和任何修饰。
2. {}3. 在接口,抽象类中可能会用到
 package java学习.Object;

public interface Animaltest {
    void eat();
}
//
public class TTest  {
    public static void main(String[] args) {
        //匿名内部类还是Animaltest的实现类
        Animaltest a1 = () -> System.out.println("hhh ");
    }
}
//或下面这个测试
package java学习.Object;

public class TTest  {
    public static void main(String[] args) {
        Animaltest a1 = new Animaltest()
        //匿名内部类还是Animaltest的实现类
        {
            @Override
            public void eat() {
                System.out.println("hhh ");
            }
        };
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值