java学习笔记——面向对象

面向对象编程(OOP)

以类的方式组织代码,以对象的形式封装数据。

核心:抽象

三大特性

  1. 封装
  2. 继承
  3. 多态

类和对象

从认识论角度考虑:先有对象后有类

对象是具体的事物,是对对象的抽象。

从代码运行角度考虑:先有类后有对象

对象的模板。

方法

修饰符 返回值类型 方法名(……){方法体;return 返回值;}

参数列表

(参数类型 参数名)

抛出异常

throw

【修饰符】
    可省略,可以是 public protected private static final abstract
    public protected private 最多只能出现其中之一
    final abstract 最多只能出现其中之一
方法的调用
  1. 静态方法static

    直接调用

     Student().say();
    
  2. 非静态方法

    //实例化这个类
    new Student().say();
    //对象类型 对象名 = 对象值;
    Student student = new Student();
    student.say();
    
  3. 静态方法和非静态方法

    静态方法:和类一起加载

    非静态方法:类实例化后才存在

    无法直接在静态方法中调用非静态方法。

  4. 引用传递:对象,本质还是值传递

创建对象

//定义一个类
public class Student {
    //属性
    String name;
    int age;
    //方法
    public void study(){
        System.out.println(this.name+"在学习");
    }
}


//类实例化后会返回一个自己的对象
//student对象就是一个Student类的具体实例
Stuudent student = new Student();

构造器

也称为构造方法,在创建对象时必须调用。

  • 构造器必须与类的名字相同
  • 必须没有返回类型(也不能写void)
实例化初始值
  1. 使用new关键字本质是在调用构造器
  2. 用来初始化值
  3. 一旦定义了有参构造,无参构造就必须显示定义(若没有定义构造器,编译器会默认生成无参构造)

快捷键alt+insert


三大特性

封装

属性私有

运用private关键字

提供一些可以操作这个属性的方法

提供一些public的get、set方法

get:获得这个数据
public String getName(){
    return this.name;
}
set:给这个数据设置值
public void setName(String name){
    this.name=name;
}
作用
  1. 提高程序安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护性增加

继承

快捷键Ctrl+H

  • 关键字extends(扩展),子类是父类的扩展,子类继承父类

  • 继承是类与类之间的一种关系,除此之外还有依赖、组合、聚合等

  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类),

    子类与父类之间,意义上讲应具有“is a”的关系

  • java中类只有单继承,没有多继承。

  • 子类无法继承父类中私有的属性/方法,只能继承公有(public)的

  • 在java中,所有的类都直接或间接的继承Object

关键词super
  • 调用父类的属性或方法,但私有(private)的不能被继承(只能继承不能访问?)。

  • 调用子类的构造器时,会在子类构造器的第一行调用父类构造器。

在构造器中时,调用构造器必须在构造器的第一行(?)

  • super只能出现在子类方法或构造方法中
  • super和this不能同时调用构造方法
重写:方法的重写(与属性无关)

静态方法与非静态方法区别很大,只有非静态方法能重写,而且必须是公有(public)的(?)。

  • 重写需要有继承关系,子类重写父类的方法
  • 方法名、参数列表均相同
  • 修饰符关系可扩大但不能缩小
  • 抛出异常的范围可以缩小不能扩大

通过final修饰的类不能被继承

多态

  1. 多态是方法的多态
  2. 父类和子类。必须有联系
类型强转

高转低(父类->子类)

  1. 父类引用指向子类对象
  2. 子类转为父类,向上转型,无需强转,可能会丢失一些方法
  3. 父类转为子类,向下转型,强转,可能会丢失一些方法
  4. 方便方法的调用,减少重复代码

强转可能丢失精度

static

public class Person{
    //匿名代码块可以用来赋初值
    //静态代码块只执行一次
    {
        System.out.println("匿名代码块");
    }
    static{
        System.out.println("静态代码块");
    }
    public Person{
        System.out.println("构造方法");
    }
    
    public static void main(String[] args){
        Person person1=new person();
        System.out.println("=========");
        Person person1=new person();
    }
}
/*执行结果
静态代码块
匿名代码块
构造方法
=========
匿名代码块
构造方法
*/
静态导入包

import static java.lang.Math.random

抽象类

关键词abstract

抽象方法只有名字,没有方法的实现

抽象类的方法靠继承它的子类实现

抽象类可以写普通方法

抽象类是个约束,不能new

接口

只有规范,无法写方法。接口都需要有实现类。

接口可以多继承,关键词interface。

  • 接口中所有的定义都是public abstract

  • 类可以实现接口,关键词implements

  • 实现了接口的类需重写接口的方法


参考
[1]https://www.bilibili.com/video/BV12J41137hu?p=60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值