Java基础--面向对象(Ⅵ)、常用类(Ⅰ)

Java基础–数组和面向对象(Ⅰ)
Java基础–面向对象(Ⅱ)
Java基础–面向对象(Ⅲ)
Java基础–面向对象(Ⅳ)
Java基础–面向对象(Ⅴ)

活动地址:CSDN21天学习挑战赛

在这里插入图片描述

一.面向对象

1.局部内部类的特点:
  • 不管是局部内部类/成员内部类: 里面的成员都可以直接访问外部类的成员包括私有
  • 如何直接通过外部类访问局部内部类
    •  在局部位置上,创建了局部内部类的对象,对象名调用成员方法
      
2.匿名内部类:就是没有名字的类
  • 匿名内部类只是内部类的一种简化格式;

    • 格式
      • 抽象类或者接口的匿名内部类
        • new 类名或者是接口名(){ //类:一般都是抽象类 ,具体类也可也,但是不推荐
  • 场景范围:

    • 就是在方法的形式参数以及返回值是抽象类或者接口的情况下 ----> 是一种简化格式
  • 匿名内部类的本质:

    • 就是继承该类(抽象类)或者实现了给接口的子类对象

补充:

//外部类
class Outer {
    private int x = 100;
    //外部类的成员方法
    public void show() {
        int num = 20; //隐藏了final修饰符
        //局部内部类
        class Inner{
            //成员方法
            public void method() {
                System.out.println(x);//局部内部类的成员在访问外部类的成员
                System.out.println(num); //此时这里面需要访问的外部类的局部变量num
            }
        }
        //创建局部内部类对象
        Inner inner = new Inner();
        inner.method();
    }
}
//测试类
public class InnerClassDemo {
    public static void main(String[] args) {
        //就创建外部类的对象
        Outer outer = new Outer() ;
        outer.show();
    }
}
  • jdk版本7的版本,局部内部类访问的外部类的成员方法的局部变量,这个局部变量有什么特点?为什么?

  • 特点:

    •       jdk7的版以及以前:int num = 20 ;  立即报错:必须被final修饰!
      
    •       jdk8已经优化了,通过反编译查看, num已经被final修饰符
      
  •       为什么:
          *           因为局部变量的生命周期,随着方法的调用而存在,并随着方法调用结束而消失,下面这个代码show(),调用完毕,num应该就被是释放了
          *           但是,show方法里面创建的局部内部类对象,对象里面的成员方法在间接的使用局部变量,此时不能让num立即释放,所以必须为final修饰符 ----> 最终的,无法更改的,是一个常量!
    

二.常用类

1.Object
  • Object: 所有Java类的父类(自定义的类或者jdk提供的类),也称为"超类"

    • 任何类默认继承自Object

    • 常用的功能:

      • public String toString(): 本身的含义 :返回对象的字符串表示形式(直接输出对象的名称,就是地址值)
        • 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法
      • idea工具自动生产
        • alt+fn(看电脑,有的需要有的不需要)+ins---->toString()—>ok
//测试类
public class ObjectDemo  {
    public static void main(String[] args) {
        //创建一个学生
        Student s = new Student("天天",23,"女") ;
        //直接对象名称,直接默认访问的就是Object类的toString()---->打印出来的地址值
        System.out.println(s) ;//com.qf.object_03.Student@1540e19d  直接输出对象名:地址值  没有意义
        
        //重写Object的toString()---->显示让人容易读懂的信息表达式 ---这个事物的具体信息
        System.out.println(s.toString());
    }
}
//学生类
public class Student  extends  Object{ //默认继承Object 隐藏了extends Object:
    												//不用再去写上去 ----> public class Student 就可以
    private String name ;//姓名
    private int age  ;//年龄
    private String gender ;//性别

    //无参构造
    public Student() {
    }
    //有参构造
    public Student(String name, int age,String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
    //idea自动生成 ----> alt+fn+ins---->属性全选---->ok
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}
2. Object类的常用功能:
  • 常用的功能:
  • public String toString():
    • 本身的含义: 返回对象的字符串表示形式(直接输出对象的名称,就是地址值)
      • 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法
  • public final Class getClass():
    • 使用对象名调用getClass(): 获取正在运行的类或者接口(字节码文件对象),也称为"Class类对象"
  • public int hashCode() :
    • (了解:哈希算法—提供哈希表) 返回对象的哈希码值 (理解为 “地址值”,不是实际意义的地址值)
    • 每一个对象的哈希码值不同的
3.Object类的equals
  • public boolean equals(Object obj):

    • 比较两个对象是否相同

    • ==和equals区别:

      • ==:

        • 基本类型:比较的是数据值是否相同
        • 引用类型:比较的是地址值是否相同
      • equals(): Object类的方法

        • 本身默认比较的是两个对象的地址值是否相同;当多个对象的成员信息相同时,则认为是同一个人,所以Object类需要建议所有的子类要重写equals(),其比较的是对象的成员信息是否相同

          补充:

          • idea中: alt+fn+ins ----> eauals and hachcode() ----> ok
          • 几乎jdk中的所有类都基本重写equals()方法,所以比较的是这些类的成员内容是否相同
  • 1
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

In-Deep

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值