java面向对象笔记

01什么是面向对象

面向过程:线性思维,按步骤做,适合处理简单的问题
面向对象:物以类聚,适合处理复杂的问题,分类的思想
宏观面向对象,微观面向过程
面向对象编程oop本质:以类的方式组织代码,以对象的方式封装数据
三大特征:封装,继承,多态(同一个对象有多个状态)
类是抽象的概念,对象是具体的

02回顾方法的定义

访问权限
Public公共的
Default包访问权限,在自己的包可以随意访问
Private私有的

03回顾方法的调用

静态方法static :通过类名.方法就能调用
非静态方法:new一个对象,用该对象名.方法
非静态方法不能直接调用静态方法。静态优先于类产生。

在静态里面不能用this,因为this是调用类的,静态优先于类产生,在静态方法里可以直接调用静态的东西,也可以使用类名去访问静态方法

04类与对象的创建

类:是一种抽象的数据类型。(属性+方法)
对象:对抽象概念的具体实例。

使用new关键字创建对象,除了分配内存空间外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用。

成员变量初始值
Java中所有的变量都是先声明再赋值才能使用
Java中的成员变量,在创建对象的时候都会执行一次初始化赋值操作
Int 0
Byte 0
Short 0
Long 0
Float 0.0
Double 0.0
Char 空 其实给的也是0
Boolean f 其实也是0
String null(空,等于什么都没有)(string是Java提供的一个类)
Xxx null(自己写的类)

05构造器详解

1.和类的名字相同
2.没有返回类型

06创建对象内存分析

在这里插入图片描述
方法区也是堆!!!!

07简单小结类与对象

1.类与对象
2.方法:定义和调用
3.对应的引用:
引用类型:基本类型之外的类型,对象是通过引用来操作的,指向对象的地址
4.属性(成员变量):默认初始化
char默认值:u0000
5.对象的创建和使用
必须使用new关键字和构造器创建。
对象的属性和方法都用.调用
6.类:
静态的属性和动态的行为

08封装

封装:属性私有,get and set
高内聚低耦合!!!!
高内聚就算类的内部数据操作细节自己完成
低耦合仅暴露少量的方法给外部使用
Private私有的
成员变量一般用private保护成员变量不被胡乱赋值
Getter:从成员变量中获取数据
Setter:给成员变量赋值且给一些保护工作
快速生成:空白位置-右键-generate-getter and setter-全选-ok

封装的好处:
1.提高了程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增加了

09继承extands

继承(什么是什么可以写成继承,类与类之间的关系
java只有单继承!!!!
父子关系:子类可以拥有父类中除了私有内容的其他所有内容
子类是父类的扩展
当出现x是一种y的时候,x就可以继承y

Public class 类extend父类{
}

简化代码的开发
子类对父类进行了扩展

Object
万事万物皆为对象
在java中所有的类都默认继承object
Object是一个类,所有类的根
我们写的类即使不写继承,也会默认继承object

10Super

super:表示父类中的内容
可以调用父类的构造方法,必须写在子类构造方法的第一行
super必须只能出现在子类的方法或构造方法中
super和this不能同时调用构造方法(因为都要写在第一行)
this();本类的构造
super();父类的构造

如果父类的构造是无参数的可以不写,有参数的要写
用super和this来区分父类和子类中重名的内容
创建子类要先创建父类
在子类构造方法的第一行会默认调用父类的构造方法

变量查找顺序,先找自己类,再找父类

11方法重写

非静态的方法可以进行重写,只能是public
重写:子类对父类中提供的方法进行重新定义
语法:子类和父类中的方法的声明完全一致,但方法体不同
方法名必须相同,参数列表必须相同,修饰符范围可以扩大,但是不能缩小,抛出的异常可以被缩小,不能被扩大
public>protected>default>private
本质:方法的覆盖

为什么需要重写:父类的功能,子类不一定需要,或不一定满足

不能被重写的方法:static,final,private

12多态

动态编译:可扩展性
同一个对象拥有多种形态(方法的多态)

把子类的对象赋值给父类的引用变量称之为向上转型
会屏蔽掉子类特有的方法,不能调用子类特有的方法

只能使用父类和子类都有的子类方法。

把父类的变量转化回子类的变量称之为向下转型、
向下转型有风险,Java要求必须写强制类型转换(就可以使用子类特有的方法了)
(子类类型)变量

ClassCastException 类型转换异常

多态的作用把不同的数据类型进行统一,让程序具有超强的可拓展性
父类的引用可以指向子类
静态方法的调用只和左边定义的数据类型有关。
非静态方法和右边有关

13Instanceof关键字

判断对象是什么类型的
判断a是否是b if(a instanceof b)
ab存在父子关系返回T

14static关键字

静态属性最好用类名调用!
一般是多个对象共同使用的。

{
//匿名代码块
}
static{
//静态代码块
}

执行顺序,先执行静态代码块,后进行匿名代码块,最后执行构造方法
静态代码块只执行一次

静态导包 import static +包名

Final最后的
被final修饰的变量不可以被改变
又被称之为常量
被final修饰的方法不可以被重写
被final修饰的类不可以被继承

15抽象

现实中不存在的东西java只声明不实现
Abstract修饰方法,这个方法就是个抽象方法,抽象方法没有方法体,直接;结束 (是一种约束,子类必须实现它的方法,除非子类是抽象类)

特点
抽象类不可以创建对象(不能new,只能用子类实现)
抽象类的子类必须重写父类中的抽象方法,否则子类也是抽象类
通过抽象类可以强制要求子类中必须有哪些方法
抽象类中可以用正常的方法
类中如果有抽象方法,类必须是一个抽象类

16接口

接口中只有抽象方法,本质是契约!!(只有方法的定义,需要实现/重写)
接口中定义的属性都是静态常量(一般不用)
也具有多态性 可以把很多不相关的东西进行整合
接口实际上是一种特殊的抽象类
接口中所有的方法都是抽象方法,可以省略abstract
接口里所有的内容都是公开的,可以省略public

能继承接口的只能是接口
接口和类只能是实现关系implements ,必须要实现/重写抽象方法
接口一样具有多态性
接口使用interface来声明
类只能单继承,接口支持多实现
类可以继承一个类,实现多个接口
接口的实现类命名规则:接口名+Impl

接口的特点:
接口中所有的方法都是公开的抽象方法
接口中所有的变量都是全局静态常量 public static final

17N种内部类

什么是内部类?
定义在类内部的类。
外部类正常使用内部类,内部类可以使用外部类的所有方法和属性(包括抽象方法
一个Java类中可以有多个class类但是只能有一个public class

1.成员内部类(非静态的内部类)
通过外部类来实例化内部类

Outer outer=new Outer();
Outer.Inner=outer.new Inner();

2.静态内部类
编译完成后没有指向外部类的引用
创建不需要以来外部类
只能使用外部类静态的方法和属性

3.局部内部类(方法中的内部类)
只能在定义该局部类的方法中使用
定义在实例方法中的局部类可以使用外部类全部
定义在静态方法中的局部类只能使用外部类的静态方法和变量
局部类也能使用方法中的参数和局部变量(只能是final形式!!)

4.匿名内部类
可以使用外部类的所有,一般用于回调函数和监听

equals and ==

Equals object提供的方法,判断两个对象是否相等,也是判断内存地址
C1.equals(c2)
判断左右两端数据是否相等,默认判断两个对象的内存地址是否一致,一般用在基本数据类型上
可以自己重写equals
String a=“”
String b=“”
字符串相等就会返回true,因为相同字符串并没有单独占用内存空间 都是t
String x=new string(“”)
String重写了equals方法,判断内容是否一致 t
String里面的判断的是地址 f
字符串的判断必须用equals

Tostring

直接打印对象默认执行对象的tostring ()方法
返回包名+类名+@+内存地址
对一个对象的字符串的表示形式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值