java基础之面向对象详解

类的设计

类的成员
    属性
        静态属性(类变量)
            为该类的多个实例对象所共享,不属于具体某个对象,通过类.静态属性名调用
        非静态属性(实例变量)
            不属于类,具体归某个对象所有(实例变量),通过对象名.属性名调用
        与变量作对比的不同点
            声明的位置不一样
            属性有默认初始值,变量没有
            在内存中加载的位置不一样,属性(非静态)加载在堆空间中,变量加载在栈中,随着方法的使用而进栈,方法用完,出栈销毁
            属性可以用权限修饰符修饰,变量不行
        底层属性赋值的先后顺序:1.默认赋值,2.显式赋值/代码块赋值,3.构造器赋值,4.对象.属性赋值
    方法
        方法大体也是分静态方法,非静态方法,理解与属性一致,还有一个抽象方法,放在关键字那里说
        一个完整的方法是,权限修饰符,返回值类型,方法名,参数列表,方法体
        编译器如何确定调用的是哪一个方法,就是根据方法名和形参列表去确定的
        静态方法通过类.方法名去调用,非静态方法通过对象名.方法调用
        方法名要达到见名知意

        形参列表
            如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。
            方法的重载:只要求方法名一样,参数列表不一样就是方法的重载了
            因为开发中,同样的一个功能需求,需要处理不同的参数,例如println(),你有可能输出的是一个数值,也有一个输出的是一个字符,或者说一个数组,这就造就了方法的重载的存在了
            可变形参,底层就是一个数组,只不过他帮你造好了数组而已
            return关键字的作用:第一用来返回某个值,第二用来结束方法
    构造器
        每个类中必须要有构造器
        作用:用来加载该类的结构和功能(加载类定义的成员),并对类的信息进行初始化
        一个类中可以根据具体需求声明多个构造器(用到了方法重载)
        在继承中结合this和super关键字加载本来和父类的结构和功能
        构造器不能于static连用,因为他是用来造对象的,归具体某个对象所有,是不可能拿出来共享的。
        如果我们不自己定义构造器,系统会自动赠送一个空参构造器,在new对象的时候就会调用了
    代码块
        作用:初始化类中的信息,一般用于初始化代码较多的情况,不单单初始化属性,构造器中一般是用来初始化属性的
            方法体里面能写什么,代码块里面就能写什么,所以说他是初始化有一堆代码需求采用的,开发中较少使用
            需要注意的点
                代码块和构造器的初始化不同
                构造器的初始化只加载不执行,而代码块的初始化是加载并执行
                静态代码块是随着类的加载而执行的,类只加载一次,所以静态代码块也只执行一次
                非静态代码块是随着对象的加载而执行的,每创建一个对象,非静态代码块就加载并执行一次
                不提供外部调用(执行),是随着类或对象的加载去执行的
    内部类
        内部类的理解及分类
            内部类的理解
                作为外部类的一个成员去理解
                他本身作为一个类去理解,可以定义类中该有的成员
                内部类特殊的点
                    内部类用abstract和static一起修饰,而外部类是不行的,外部类不能用static修饰
                    作为一个成员,内部类是可以用statci修饰的,相当于一个静态结构的成员
            内部类的分类
        如何实例化成员内部类
            根据类的成员去理解,找到这个成员,创建对应的对象即可。
            举例:非静态的成员内部类,先创建外部类的对象,然后用外部类的对象.new 内部类的对象。静态的也类似
        成员内部类如何调用外部的结构,外部类如何调用内部的结构
            创建相应的对象,通过对象去调用即可
        局部类内部类开发的应用场景
            一般是用在一个方法中,用来返回一个抽象类的匿名子类的对象。

类的理解
    面向对象思想和面向过程思想
        面向对象的思想,就是充当指挥者,强调谁来做,具体怎么做不关心。

意思是把要实现的功能按角色来进行划分,例如你要实现一个图书馆里系统,里面学生的功能就交给学生类来做,管理员的功能是什么就交给管理员来做,清洁功能就给清洁工来做,这样去编写每一个角色的功能。调用的时候要执行什么功能就找到对应的角色去调用。相当于大公司的管理层一样。领导想弄销售工作,就找销售部门这个角色去干,领导想弄广告宣传工作,就找宣传部门这个角色来做。其实就是一个分工合作思想,大大提高工作效率。于代码来讲,虽然每一个角色的功能都得我们自己去编写,但是我们这样分工合作让每一个角色负责什么功能,条理清晰,后续想拓展功能,维护功能,也能直接找到对应的角色去更新。按角色实现了代码的解耦合(也就是依赖性不大),代码结构非常清晰。做项目的时候你就会感觉到面向对象的思想是多么的NB


        面向过程的思想,就是功能当中的每一个细节都得自己亲历亲为,强调怎么做
    类是对一类事物的描述,是抽象性的,概念性的描述,重点是一类事物,是一类,例如:是对人的描述,而不是说对姓名为某某某的描述
    类里面的结构和功能就对应该事物所拥有的属性(名字,年龄等),方法(能干什么活)
    类和对象的关系
        对象是类描述的一类事物的具体实例化(具体个体),通过类的实例化也就是对象,去调用具体的功能结构。

简单来理解就是:类是一个个角色模板,而对象是由这些模板产出的一个个产物。例如房子,模板就是这个房子的设计图,对象就是建出来的房子。再例如手机,类就是手机的设计图纸,而对象就是根据这个手机设计图生产出来的手机。
        万事万物皆对象,就是因为类是描述一类事物的,而对象是类的实例化,是类描述的事物在现实世界中实际存在的个体。

简单来理解就是:类是世间一切事物的图纸,那么对象自然就是根据这些生产出来的实体。所以说万事万物皆对象。

面向对象的三大特征
    封装性
        主要体现在四种权限修饰符的修饰上
        具体理解:在调用时类的结构和功能的可见性大小
        从上往下依次递增,private,default,protected,public,其中private和public比较常用
        private是只能在自己定义的类内部使用,所以提高了两个配套方法供外部访问,setXxx,getXxx
        为什么要有封装性,就是把该隐藏的隐藏起来,该暴露的暴露出来,有些东西不希望外部干涉实现细节,就隐藏起来,可以让你干涉就暴露出来
    继承性
        理解:把各个类通用的属性和功能提取出来,作为一个父类去让这些类继承,提高代码的复用性和拓展性
        继承分类与类的继承,接口与接口的继承,java当中类与类是单继承的,接口和接口是多继承的,类可以实现多个接口
        继承的具体表现,子类继承父类后,就拥有了父类所有的结构和功能
        this关键字和super关键字
            this关键字
                用来区分局部变量(形参)和成员变量重名,不重名一般省略不写
                用来调用本类中的其他构造器,避免重复编写代码
                只能放在方法中的首行,不能自己调自己,因为这是个死循环
                只能放在方法首行意味着一个方法中只能有一个this或super调用构造器
                用来调用本类中的属性,方法,构造器,一般省略不写,调用构造器不能省略
            super关键字
                用来调用父类的属性和方法的,还有构造器
                区分子父类重名的成员变量,一般省略不写
                用来调用父类的构造器,加载父类的信息
                这个也必须在首行,this和super都是二者只能存在一个,因为都要在首行
                调用方法时主要是用来调用父类被重写的方法
       (重点) 具体怎么拥有父类的结构和功能的,子类中每个构造器会默认赠送一个父类的空参构造器,调用子类构造器时实际上是先通过赠送的父类构造器加载父类的结构和功能先的,直到加载完他的所有父类为止再加载自己的结构和功能的
        方法的覆盖重写:当父类的方法不能满足子类的需求时,就需要子类堆父类的方法进行覆盖重写(更新)
            具体重写规则
            1.权限修饰符大于等于父类的,其他都是小于等于(返回值,抛出的异常类型
            声明为private的方法不能重写,因为隐藏起来了,看不见
        Object的理解,Object类作为所有类的默认父类(根类),里面定义了一些通用的方法
        包装类的使用,把基本数据类型转换成对应的包装类就是为了能让基本数据类型拥有类的特征,使用面向对象的思想
            基本数据类型与包装类,还有String类型的转换
            具体的应用场景:传参的时候用(使用多态方式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值