java进阶学习——1 面向对象

本文详细探讨了Java中的面向对象特性,包括final关键字的使用,抽象类与接口的区别,以及Object类的核心方法如toString和equals。还介绍了不同类型的内部类和访问权限控制,强调了接口在解耦合和提高程序扩展性方面的重要性。
摘要由CSDN通过智能技术生成


大数据学习路线,从零开始学大数据(点击跳转,学习不迷路)

Java最详细教程 (点击跳转,学习不迷路)

一、 面向对象

1. final关键字

  1. final是Java语言当中的一个关键字

  2. final 表示:最终的,不可变的

  3. 【重点】 final修饰的变量:final修饰的局部变量,一旦赋值不能重新赋值

  4. 【重点】final修饰的方法:无法被覆盖,被重写。

  5. 【重点】final修饰的类:无法被继承

  6. final修饰的引用:
    该引用只能指向1个对象,并且它只能永远指向该对象
    虽然final的引用指向某个对象A后,不能再重新指向对象B。
    但是对象A内部的数据可以被修改

  7. final修饰的实例变量呢?
    final修饰的实例变量,系统不负责赋默认值,要求程序员必须手动赋值
    这个手动赋值,在变量值后面赋值可以,在构造方法中赋值也可以。

  8. final控制不了能不能调用的问题,final管的是啥?
    final修饰的表示最后的,不能变的,不能改的。

  9. final修饰的实例变量一般添加static修饰
    static final 联合修饰的变量称为 “ 常量 ” 。

     常量名建议全部大写,每个单词之间采用下划线衔接。
     常量:实际上常量和静态变量一样,区别在于:
            常量的值不能变。
            常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。
            常量一般都是公共的:public的
    

重点【精辟:final修饰的变量只能赋一次值】

2. 抽象类

类到对象是实例化,对象到类是抽象。

  1. 什么是抽象类?

      类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。
      类本身是不存在的,所以抽象类无法创建对象《无法实例化》。
    
  2. 抽象类属于什么类型?

     抽象类也属于引用数据类型。
    
  3. 抽象类的定义?

    语法:
         [修饰符列表] abstract class 类名{
            类体;
         }
    
  4. 抽象类是无法被实例化的,无法创建对象,所以抽象类是用来被子类继承的。

  5. final和abstract不能同时使用,它们是对立的。

  6. 抽象类的子类也可以是抽象类。

  7. 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

  8. 抽象类关联到一个概念:抽象方法

       抽象方法表示没有实现的方法,没有方法体的方法。例如:
             public abstract void doSome();
        
        抽象方法特点是:
              1. 没有方法体,以分号结尾。
              2. 前面修饰符列表中有abstract关键字。
    
  9. 抽象类中不一定有抽象方法,抽象方法必须出现在抽象类当中。

10.【重点】一个非抽象的类继承抽象类,必须将抽象类的抽象方法实现了。

      这是Java语法上强行规定的,必须的,不然编译器就会报错。
      这里的覆盖或者重写,也可以叫做实现。(对抽象的实现)

在这里插入图片描述

3. 接口

(1)接口的基础语法。

  1. 接口也是一种“引用数据类型”,编译之后也是一个class字节码文件。

  2. 接口是完全抽象的。(抽象类是半抽象)或者可以说接口是特殊的抽象类。

  3. 接口怎么定义的,语法是什么?

    [修饰符列表]  interface 接口名 {}
    
  4. 接口支持多继承,一个接口可以继承多个接口。

  5. 接口中只包含两部分内容: 常量 和 抽象方法。 (接口中没有其他内容了)

  6. 接口中所有的元素都是public修饰的。(都是公开的)

  7. 接口中的抽象方法定义时, public abstract 修饰符可以省略。

  8. 接口中所有的方法都是抽象方法,所以接口中的方法不能有方法体。

  9. 接口中常量的public static final 修饰符可以省略。

  10. 一个非抽象的类,实现接口的时候,必须将接口中所有的方法都加以实现。

  11. 一个类可以同时实现多个接口。

  12. extends 和implement可以共存, extends在前,implement在后。

  13. 使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)。

  14. 接口的实现 : 类名 implement 接口名 {}

在这里插入图片描述

(2)接口的作用。

对比多态的作用:

在这里插入图片描述
接口的作用举例说明:

在这里插入图片描述
在这里插入图片描述

  • 总结: 面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
    接口的使用离不开多态机制。(接口 + 多态才可以达到降低耦合度。)

    接口可以解耦合,解开的是谁和谁的耦合!!!
    任何一个接口都有调用者和实现者。
    接口可以将调用者和实现者解耦合。
    调用者面向接口调用。
    实现者面向接口编写实现。

    以后进行大项目的开发,一般都是采用将项目分离成一个模块一个模块的,
    模块和模块之间采用接口衔接,降低耦合度。

类型和类型的区别:

is a (继承)、 has a(关联)、 like a(实现)、

  is a :
         Cat is a Animal(猫是一个动物)
         凡是能够满足 is a 的表示 “ 继承关系 ”
          A extends B
          
  has a :
          I has a Pen (我有一只笔)         
          凡是能够满足has a 关系的表示 “ 关联关系 ” 
          关连关系通常以 “ 属性 ” 的形式存在。
          A  {
              B b;
          }
          
 like a :
           Cooker like a FoodMenu (厨师像一个菜单一样)
           凡是能够满足like a 关系的表示 “ 实现关系 ”
           实现关系通常是:类实现接口。
           A implement B      

4. 抽象类与接口的区别

在这里插入图片描述

5. Object类

在这里插入图片描述

object中常用的方法:
在这里插入图片描述

5.1 toString()方法:

在这里插入图片描述
在这里插入图片描述

5.2 equals()方法:

在这里插入图片描述

重写equals方法的例子 :

在这里插入图片描述
简洁版:
在这里插入图片描述
总结:

  1. string类已经重写了equals方法,比较两个字符串不能使用 – ,必须使用equals。
    equals是通用的。
  2. String类已经重写了toString方法。

大结论:

 java中什么类型的数据可以使用 “ -- ” 判断
       Java中基本数据类型比较是否相等,使用 “ -- ”
Java什么类型的数据可以使用equals判断
      Java中所有的引用数据类型统一用equals方法来判断是否相等。

5.3 finalize()方法

在这里插入图片描述在这里插入图片描述

6. package和import

  • package

     第一:package出现在Java源文件第一行
     
     第二:带有包名怎么编译?
             Java -d . xxx.java
     第三:怎么运行?
             Java 完整类名
    
  • import

     import 什么时候不需要?
            java.lang不需要。
            同包下不需要。
            其他一律都需要。
      
      怎么用?
           import 完整类名;
           import 包名.* ;   
    

在这里插入图片描述
运行:
Java.com.bjpowernode.javase.chapter17.HelloWorld

  1. 关于import的使用。

import 什么时候使用?

     A类中使用B类
     A类和B类都在同一个包下,不用import。
     A类和B类不在同一个包下,需要使用import。
     java.lang.*; 这个包下的类不需要使用import导入。

import 怎么用?

 import语句只能出现在package语句之下,class声明语句之上。
 import语句还可以采用星号的方式。

7. 访问权限控制

在这里插入图片描述

在这里插入图片描述

8. 内部类

在这里插入图片描述

(1) 实例内部类

  • 该类在类的内部,且没有static修饰,叫做实例内部类
class Text01{
  
  //该类在类的内部,所以是内部类
  //由于前面没有static,所以是静态内部类
  class Inner01{
  }
}

(2) 静态内部类

  • 该类在类的内部,有static修饰,叫做静态内部类
class Text01{
  
  //该类在类的内部,所以是内部类
  //由于前面有static,所以是静态内部类
  class Inner02{
  }
}

(3) 局部内部类

  • 该类在类的方法当中
class Text01{
    //局部变量
    int i = 100;
    //该类在类的内部是,所以是内部类
    //局部内部类
    // 在方法里面 
	public void doSome(){
  		class Inner03{
  		}
	}
}

(4) 匿名内部类

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海码儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值