面向对象的一些知识

类与对象

类里有什么内容?

​ 一个类中可以有成员方法、静态方法、成员属性、抽象方法、静态属性

类和对象的关系

​ 类是抽象的表示,类中只能有属性和方法

​ 对象是类的具象化,面对对象就是利用类去创造该类的对象,然后用该对象去操作类的属性和方法

对象和引用的关系

Person p = new Person();
//没对象的兄弟有福了,可以在这里new一个,想要什么类型都可以自己new,哈哈哈

​ 对象->new Person(),new出的是对象,对象在堆中开辟空间

​ 引用->p,引用中存储的是对象的地址

对象在哪里开辟空间

​ 方法里的对象如果被返回了,就会在堆里开辟空间,如果没有返回,仅在方法内部使用,则会在栈里开辟

private修饰符 - 私有化

​ 如果修饰属性,则该属性不能在该类以外使用

​ 如果修饰方法,则该方法不能在该类以外使用

this关键字 - 本对象

​ this.属性:在成员方法中调用本对象的属性

​ this.方法:在成员方法中调用本对象的方法

​ this([值]):在构造方法的第一句调用其他的构造方法

注:在静态方法中不能使用this,因为静态方法属于类的方法,直接使用类名调用

封装

​ 概念:将数据和操作数据的方法(即行为)打包在一起,形成一个相对独立的、可复用的软件模块,同时对外部隐藏对象的内部细节和具体实现的过程。

​ 步骤:

​ 1.私有化属性

​ 2.添加get、set方法

问:为什么要使用封装?

​ 属性直接调用会有数据安全的问题,通过添加get、set方法去获取和设置

构造方法

​ 与类名相同且没有返回项的方法叫做构造方法

​ 作用:创建对象、初始化数据(静态属性、成员属性)

static修饰符 - 静态的

​ 1.修饰属性:该属性变为类属性,直接由类名调用

​ 2.修饰方法:该方法变为类方法,直接由类名调用

​ 3.修饰代码块,该代码块变为静态代码块,可以初始化静态属性

继承

​ 子类继承父类所的方法和属性

​ 注:创建子类对象不会创建父类对象,但是会调用父类构造方法,开辟空间存放父类成员属性

优缺点

​ 优点:减少了代码冗余

​ 缺点:增加了程序功能实现的复杂度,增加了类于类之间的关联度

子类能否继承父类所有属性和方法

​ 虽然Java官方的说法是子类不能继承父类的私有化方法和属性,但你可以在父类再写一个公有方法,在公有方法调用父类的私有化属性和方法,然后在子类调用该公有方法

super关键字

​ super.属性:在子类中,调用父类非私有化的成员属性

​ super.方法:在子类中,调用父类非私有化的成员方法

​ super([值]):在子类的构造方法的第一句调用父类非私有化的构造方法

重写/复写

​ 将父类方法在子类重新编写一遍

​ 要求:

​ 1.在子类中重写

​ 2.返回值类型、方法名、参数列表都必须和父类一致

​ 3.访问修饰符不能比父类更严格

访问修饰符

​ private、默认的、protected、public,每个修饰符都有不同权限

​ private:只允许在本类

​ 默认:在本类和本包

​ protected:在本类、本包、其他包的子类

​ public:本类、本包、其他包的子类、其他包

​ 修饰范围:

​ 类:默认的、public

​ 方法、属性:private、默认的、protected、public

Object

​ 所有类的超类,一个方法没有明确继承的父类,那么它默认继承Object类

​ 常用方法:

​ 1.equals:判断两个对象的内存地址是否相同,子类重写该方法即可

​ 2.getClass:获取字节码文件对象,子类重写该方法即可

​ 3.hashCode:获取对象的hash码,在反射中使用

​ 4.toString:获取对象的字符串表示,在获取hash值时使用

final

​ 应用场景:

​ 1.修饰属性:该属性变为常量,存放在常量池中

​ 2.修饰方法:该方法不能被子类重写

​ 3.修饰类:该类不能被继承

抽象类

​ 抽象类是一种不能实例化的类,其目的是为了被继承而设计的。它可以包含抽象方法和具体方法。

​ 特点:

​ 1.抽象类不能直接实例化,只能被子类继承。

​ 2.抽象类可以包含抽象方法和具体方法。

​ 3.子类继承抽象类后,必须实现抽象类中的所有抽象方法,除非子类自身也是抽象类。

​ 4.可以有构造方法,但是不能用来实例化抽象类。

abstract class Animal {
    String name;
	// 抽象方法
	abstract void makeSound();

	// 具体方法
	void eat() {
  	  System.out.println(name + " is eating.");
	}
}

class Dog extends Animal {
    // 实现抽象方法
    void makeSound() {
        System.out.println("Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.name = "Buddy";
        myDog.makeSound();
        myDog.eat();
    }
}

抽象方法

​ 抽象方法是一种声明但不实现的方法,它必须在抽象类中声明(不能在普通类中声明),并且子类必须实现(override)这些方法

​ 特点:

​ 1.没有方法体,以分号结束。

​ 2.子类必须实现所有抽象方法,否则子类也必须声明为抽象类。

abstract class Shape {
    abstract void draw(); // 抽象方法
}

class Circle extends Shape {
    void draw() {
        System.out.println("Drawing Circle");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape shape = new Circle(); // 合法,子类实现了抽象方法
        shape.draw();
    }
}

接口

​ 特殊的抽象类

  1. 声明方法:接口只能声明方法,而不能实现方法的代码体。所有在接口中声明的方法都是抽象的,不需要加上 abstract 关键字。
  2. 实现接口:一个类可以通过实现(implement)接口来表明它遵循了接口所定义的协议。一个类可以实现多个接口,这种多继承的特性使得接口在某些情况下比抽象类更灵活。
  3. 强制约束:实现接口的类必须实现接口中声明的所有方法,否则会导致编译错误。
  4. 无状态:接口本身不包含任何状态信息(实例变量),只包含行为的声明。
  5. 应用:接口常用于定义模块之间的协议,使得不同模块可以通过接口进行交互而不依赖于具体实现,从而提高了代码的可维护性和扩展性。

多态

​ 指的是同一个方法调用可以在不同的对象上有不同的行为。多态性使得程序可以根据对象所属的类来调用相应的方法,从而实现方法的重用和灵活性的增强。

  1. 方法重写:多态是通过方法重写(Override)来实现的,子类可以重写父类的方法,即在继承关系中,子类可以对父类中的方法进行重新定义。
  2. 编译时类型和运行时类型:在运行时,对象的实际类型决定了调用哪个方法,而在编译时,方法调用会根据声明变量的类型来确定。
  3. 实现方式:多态可以通过继承实现,也可以通过接口实现。在继承中,子类重写父类的方法,从而表现出不同的行为;在接口中,不同的实现类可以实现同一个接口的方法,表现出不同的行为。
  4. 提高灵活性:多态性使得程序可以根据对象的类型动态调用适当的方法,这样在不同情况下可以使用相同的方法名执行不同的操作,从而提高了代码的可复用性和可扩展性。

内部类

​ 在一个类的内部定义另一个类

  1. 成员内部类(Member Inner Class):定义在另一个类的内部,作为该类的成员。它可以访问外部类的所有成员(包括私有成员),并且可以使用 this 关键字引用自身。
  2. 静态内部类(Static Nested Class):定义在另一个类的内部,但使用 static 修饰。静态内部类不持有对外部类对象的引用,因此它只能直接访问外部类的静态成员,而不能访问非静态的外部类成员。
  3. 局部内部类(Local Inner Class):定义在方法内部的类,作用域限定在方法内部。局部内部类可以访问方法的参数和局部变量,但是这些变量必须声明为 final 或是实际上是 final 的(Java 8及以后版本放宽了对变量的限制)。
  4. 匿名内部类(Anonymous Inner Class):是一种没有类名的局部内部类,通常用于创建实现某个接口或是继承某个类的对象,且只使用一次的情况。匿名内部类必须实现接口或继承抽象类,并在定义的同时进行实例化。

若有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值