类和接口

发布时间:2024年01月01日

内容大部分来源于学习笔记,随手记录笔记内容以及个人笔记

对象Object

java是面向对象的语言,一个对象包含状态和行为

可以这样理解,我眼前的石头,手里水杯,这些具体到某一个个体,这就是对象;像手机,电脑这种,只能定义到一个范围,不能具体到是哪一个手机或电脑,就不是对象

在java中,可以通过对象来使用对象所在类的方法,或拿取对象自身的属性(值),java程序就是如此实现的

List a = new List();//创建对象,此时a就是对象
a.name;//获取这个对象的name的值
a.name = "a";//修改这个值
a.run();//调用这个方法,而且是a调用的

一个java文件可以有多个类/接口,但只能有一个public类/接口供外部访问

public修饰的类名和文件名相同,且只有一个

类Class

对象的类型,换种说法。我手上的华为Mate 60的类型是手机。类中包含变量和方法和构造方法(方法也叫函数)

public class dog{
 ? ?//变量,也叫属性
 ? ?String name;
 ? ?int age;
 ? ?
 ? ?public dog(){}//构造方法(函数)
 ? ?
 ? ?//方法
 ? ?void eat(){
 ? ? ? ?System.out.println("吃饭");
 ?  }
 ? ?
 ? ?//块代码,初始化块
 ?  {
 ? ? ? ?int a = 1;
 ?  }
 ? ?
 ? ?//静态代码块
 ? ?static{
 ? ? ? ?int b = 0;
 ?  }
 ? ?
 ? ?public class aa{
 ? ? ? ?private int c;
 ?  }
}
  • 变量 String name; String前省略了访问权限修饰符(就是限制使用范围的)

    • 访问权限修饰符 public:允许所有访问

      protected:只允许本类或同一个包下使用 【default】:这个就是不写,默认的,表示允许本类和同个包下访问 private:只允许本类中使用

  • 方法 调用是执行的代码

  • 初始化块\代码块 创建对象前自动执行的代码 优先于构造函数

  • 内部类 定义在类中的类

  • 构造方法(函数) 创建对象时自动执行,没有构造函数java会自己生成一个无参的构造函数

final

  • 修饰属性(变量):只能赋值一次不可更改,此时也叫常亮

  • 修饰类:不可被继承

  • 修饰方法:不可重写,有中说法是private修饰的方法隐式地认为被final修饰过,其实private的方法只能在本类中使用,别的都不能调用

静态声明

static

  • 变量: 修饰变量,该变量由该类的所有对象共享,不需要对象也可以调用(直接类名调)。 同时不管何种方式修改这个变量,修改后再调用就是修改后的值,简单的说就是,普通的变量,通过对象A调用普通的变量,这个变量就已经贴上A的标签了,不会对这个变量,它的任何状态都是A的。别的对象B使用这个变量名调用时,就是一个新的,独属于B的变量

    有一个学生的类
    class 学生{
        现在有两个变量
        String 橡皮;
        static String 黑板;
    }
    学生A.橡皮  代表着学生A的橡皮
    学生B.橡皮  代表着学生B的橡皮
    学生A.橡皮 = 大; 学生A的橡皮是大的
    学生B.橡皮  在调用的时候就不会受到上面的影响
    这就是普遍变量
    ?
    学生A.黑板 = 龙的传入;  代表着在黑板上写着龙的传人
    学生B.黑板              代表学生B调用黑板的属性,发现黑板上写着龙的传人
    这说明静态变量不是独属于对象的,是该类对象共享的
  • 方法: 允许直接使用,就是可以通过类名调用,不用创建对象就可以调用(这一点很关键,有些for循环之类的要调用方法钱会一直创建对象,对性能有影响)

  • 代码块(初始化块): 就是用{}包起来的代码,会在创建第一个对象前执行(先执行静态代码块,后执行代码块内容),在一些业务逻辑有大用

  • 内部类:

    外部类对象共享,只能访问外部类的静态成员。

接口Interface

和类相似,带把class关键字换成了interface,类有具体的实现,而接口没有具体的实现

接口中的方法默认被static修饰,也就是说可以直接通过接口命名调方法

public class A{
    public void go(){
        方法的具体实现
    }
}
?
public interface B{
    public void run();
}

JDK 1.8 以前,接口中抽象方法必须且默认为 public,不允许实现任何方法。

JDK 1.8 以后,接口中抽象方法可以且默认为 default,且允许实现 static 和 default 方法。

JDK 1.9 以后,接口中抽象方法可以是 private。

不过日常中多时使用public

抽象声明

  • abstract方法:只有声明,没有方法的具体实现,和接口的写法差不多

  • abstract类:修饰类后,这个类就是抽象类了,不能实例化对象,必须其他类继承后才能通过子类构造对象

public abstract class Vehicle {
 ? ?// 声明变量
 ? ?String brand;
 ? ?// 声明并实现方法
 ? ?public void go(String loc){
 ? ? ? ?System.out.print("go to" + loc);
 ?  }
 ? ?//声明方法但不实现
 ? ?public void run();
}

接口和抽象类的区别

  1. 接口不能实现普通方法,抽象类可以实现具体的方法、也可以不实现。

  2. 接口只能定义静态常量,抽象类可以定义非静态变量。

  3. 一个实体类可以实现多个接口,但只能继承一个抽象类。

更新声明

  • default方法:接口中用default修饰方法可以写实现

    • 可以直接在接口内实现,供没有定义的旧类直接使用。若类中实现了该方法则覆盖。

    • 如果类实现了多个接口且拥有同名 default 方法:

      • 两个接口若存在继承关系,调用时优先使用子类方法。

      • 否则,必须重写子类 default 方法,通过 super 关键字明确实现哪个接口

    public interface IntefercaeDemo {
    ?
        //具体方法
        default void showDefault(){
            System.out.println("this is showDefault method");
        }
        static void showStatic(){
            System.out.println("this is showStatic method");
        }
        
        //没有实现的抽象方法
        void sayHi();
    }

包Package

每一个文件,在最前面都会有自身的包的位置

同时该文件中如果用到其他位置的类或接口什么的,页会在文件首部记录这个文件的存储位置

这个位置是相对位置,都是从项目结构下的src.main.java开始说明

package com.qf.controller   //第一条一般都是该文件的位置,不包括文件名
?
package com.qf.service.UserService  //从这里开始就是导入的文件位置了,而且直接指向文件,UserService的位置
?
public class UserController{
    public void get(){
        //调用UserService的getUSer方法
        User user = UserService.getUser();
    }
}
文章来源:https://blog.csdn.net/missmoonlight/article/details/135297765
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。