Java面向对象基础

面向对象

对象内存图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTaJzM0r-1605107557057)(F:\XunLeiDownLoad\Java\02-Java语言进阶\day01_Object类、常用API\1604830232450.png)]

两个对象调用同一方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZJmXriL-1605107557059)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604830509229.png)]

**变量与方法分离:**堆内存只负责对方法的顺序调用,在执行期间创建的变量存放在堆内存中,创建的方法存放在方法区中。

成员变量与局部变量

  • 位置不同

  • 作用范围不同

  • 初始值不同

  • 内存位置不同

    成员变量在堆内存、局部变量在栈内存

  • 生命周期不同

封装

概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的
方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

步骤

1、private关键字修饰成员变量

2、使用getXxx、setXxx方法访问成员变量

this关键字

指向当前对象所在的类

构造方法

作用:当对象被创建时,使用构造方法实现对成员变量的赋值。

public class Student {
  private String name;
  private int age;
  // 无参数构造方法
  public Student() {} 
  // 有参数构造方法
  public Student(String name,int age) {
    this.name = name;
    this.age = age; 
  }
}

标准代码–JavaBean

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VYaF9iV-1605107557061)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604842251449.png)]

static关键字

用static关键字修饰的成员方法,称为静态方法,使用时直接用类名调用即可,不需要创建类对象。例如Math.abs

注意事项:

  • 静态方法可以直接访问类变量和静态方法

  • 静态方法不能直接访问普通成员变量和普通成员方法。但成员变量可以直接访问静态变量和静态方法。

  • 静态方法中,不能使用this关键字

  • 思考以上注意事项时,主要考虑变量与方法的生命周期

静态方法、变量内存图

  • 随着类的加载而加载(是不是随着类的释放而释放?)
  • 存储在一块固定的内存区域(静态区),可以被直接调用
  • 优先于对象存在,可以被所有对象共享(程序在执行时首先加载静态方法和变量,且在全部生命周期中不释放)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWtQh227-1605107557067)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604844134613.png)]

继承

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4lMydKtX-1605107557069)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604844921718.png)]

注意:

  • 当子类中出现于父类同名的变量时需要有super关键字来访问父类变量

  • 当子类中出现与父类同名的方法时需要用方法重写(Override)

  • 继承可以实现对父类方法的继承以及在类中添加新方法(以下是经典的使用场景)。

  • 只能是单继承

    class Phone {
    public void sendMessage(){     
    System.out.println("发短信");         
    }     
    public void call(){     
    System.out.println("打电话");         
    }     
    public void showNum(){     
    System.out.println("来电显示号码");         
    }     
    }
    
    class NewPhone extends Phone {
        
    //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能     
    public void showNum(){     
    //调用父类已经存在的功能使用super         
    super.showNum();         
    //增加自己特有显示姓名和图片功能         
    System.out.println("显示来电姓名");         
    System.out.println("显示头像");         
    }     
    }
    

注意:

1、子类方法覆盖父类方法,必须保证子类权限大于等于父类权限

2、子类方法覆盖父类方法时需要保证除了函数体之外,其余部分均相同。

父类空间优先于子类空间创建,子父类均利用自己的构造函数实现初始化(在子类构造函数中默认会有super();继承父类构造方法,达到这样的效果)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVa0zO4E-1605107557070)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604846829238.png)]

用法

this用来调用成员变量和成员方法

super用来调用父类变量与父类方法

抽象类

父类被子类继承并且重写成不同的形式,其父类的方法体的存在就没有意义了,此时我们使用抽象方法来修饰父类的方法

注意:

  • 包含抽象方法的父类是抽象类
  • 不包含抽象方法的父类也可以用abstract来修饰成抽象类
  • 抽象类必须被实现才能使用

接口

接口是Java语言中一种引用类型(其他引用类型还有?),不同于类内部包含了成员变量、构造方法、成员方法,接口内部主要是成员方法

使用接口时,不能直接利用接口创建对象,只能被实现(implement),之后再利用实现之后的类来创建对象,调用方法。

其基本格式如下:

 public interface 接口名称 {
    // 抽象方法
	public abstract void method();
    // 默认方法 其中default不能省略,供子类调用或者重写
	public default void method() {
         执行语句
    }
    // 静态方法,无法重写,无法继承,只能被直接用接口名调用
	public static void method2() {
        // 执行语句    
    }
    // 私有方法,只能被接口内部的默认方法来调用
     private void method3(){};
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h1OzobVI-1605107557071)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1604934226488.png)]

  • 对于抽象方法,必须重写所有抽象方法,同名的抽象方法只需重写一次
  • 默认方法有重名时,必须重写一个默认方法
  • 静态方法不会冲突,因为他们都在自己的接口类中
  • 接口之间也可以继承
  • 接口中不可以定义成员变量,但是可以定义不可以改变的常量public static final
  • 接口中没有静态代码块(?)

多态

实现父类,重写方法从而实现多态

转型:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ov971v7-1605107557072)(G:\Users\25318\文件\Java笔记\Java基础面向对象常用类\img\1605105585428.png)]

final关键字

final关键系修饰的语句,表示不可改变:

  • 类:被修饰的类不能够被继承

  • 方法,被修饰的方法不能被重写

  • 变量,被修饰的变量不能被改变

    在修饰未被赋值局部变量时,被修饰的局部变量仅能被修改一次

修饰符权限

publicprotecteddefaultprivate
同一类中
同一包中
不同包中子类
不同包的无关类

内部类

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

  • 内部类可以直接访问外部类的成员,包括私有成员
  • 外部类访问内部类成员,必须建立内部类对象
  • 创建内部类对象方法:外部类.内部类 对象名 = new 外部类型().new 内部类型();

匿名内部类

ew 父类名或者接口名(){
    // 方法重写
    @Override 
    public void method() {
        // 执行语句
    }
};

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

  • 内部类可以直接访问外部类的成员,包括私有成员
  • 外部类访问内部类成员,必须建立内部类对象
  • 创建内部类对象方法:外部类.内部类 对象名 = new 外部类型().new 内部类型();

匿名内部类

ew 父类名或者接口名(){
    // 方法重写
    @Override 
    public void method() {
        // 执行语句
    }
};

在这里插入图片描述

以上是对Java封装、继承、多态以及相关基础类的总结。

在这一部分我需要在脑海中构建出java方法和类的各种关系以及相关关键字的作用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值