面向对象oo

数据类型 引用类型变量     指向                 对象 

Student                zs            =             new Student();

方法签名:方法名+参数列表

重载 (overload):

              1.在同一个类中,方法名相同,参数列表不同。与返回值类型,变量名称无关

               2.编译器在编译时会根据方法的签名自动绑定方法

构造方法:构造函数,构造器,构建器-----------复用给成员变量赋初值始代码

        也属于类中成员,可以用四种修饰符来修饰

作用: 1.给成员变量赋初始值

            2.与类同名,没有返回值类型(连void都没有)

            3.在创建(new)对象时被自动调用

            4.不写默认给一个无参构造,写了就不给无参构造

            5.构造方法可以重载

了解:

1.this:只能在方法中,方法中访问成员变量之前默认有个this       

               指代当前对象,哪个对象调用方法它指的就是哪个对    

               例如: zs.study();-----study()中this指的是zs

2.     this.方法名()-------调用方法

        this()-------------调用构造方法   且只能用在构造方法里面,且只能在第一行

3.null:表示空,没有指向任何对象,若引用的值为null,则该应用不能进行任何点操作了,若操作则发生NullPointException

4.引用类型数组:

        1)Bomb[ ] bs = new Bomb[3];

        bs[0] = new Bomb(100,200); new后面的Bomb依据于上面的bs中括号左边的类型

bs[0]初始默认值为null,new之后就存了Bomb对象地址

        2)访问对象的属性和方法

        bs[0].x= 111;

 可以点出来的都是依据bs左边的数据类型

继承:extends       派生类/子类  extends  超类/父类

        作用:代码复用

        一个超类可以有多个派生类                                       

        一个派生类只能有一个超类-----------单一继承

        超类只能访问自己的,不能访问派生类。

        派生类可以访问超类

        具有传递性

        补充:要符合is a的关系  派生类is  a  超类

         java规定:构造派生类之前必须构造超类

        *若派生类中的构造方法中没有调用超类的构造方法,则默认super()调用超类的无参构造方法

        *派生类的构造方法中若自己调用了超类的构造方法,则不再默认提供

         *super()调用超类构造方法,必须位于派生类构造方法的第一行

补充:泛化:将共有的抽出来的过程,设计层面(泛化),代码实现上(继承),

==泛化就是继承

super:指代当前对象的超类对象

super用法:

  super用于访问当前对象的超类

       super.成员变量名----------了解

        super.方法名()---------------调用超类的方法

       super()-------------------------调用超类的构造方法    

this:当前对象

向上造型:

        超类型的对象指向了派生类的的对象

   ****能点出来什么,看引用的类型(对象名左边的)---------规定

超类型               派生类型

Animal o = new Tiger();//向上造型   只能点出Animal的

Person p = new Student();                只能点出Person的

要符合:

超类  指向  派生类

派生类 is a 超类

重写:override 覆盖

        发生在父子类中,方法名相同,参数列表相同

         

当派生类觉得超类的行为不够好时,可以重写

***重写方法被调用时,看对象的类型  (new出来的才是对象)

***遵循两同两小一大

1.两同 

        1)方法名相同

        2)参数列表相同

2.两小

        1)派生类的方法返回值类型必须小于或等于超类方法的

               1.1) void和基本类型时必须一样

               1.2)引用类型时,小于或者等于     父类大,子类小

       2)  派生类方法抛出的异常方法必须小于或等于超类方法的

3.一大

        派生类的方法访问权限必须大于或等于超类方法的

package:声明包

        作用:避免类的命名冲突

        同包中的类不能同名,不同包中类可以同名

        类的全称

        建议:包名都小写

        package声明必须位于第一行

import :

        同包中的类可以直接访问,不同包的类需要import

访问控制修饰符:

       ------------ 保护数据的安全

        public:                                                               任何类

        private:                            本类

        protected:受保护的,     本类,同包类,派生类

        默认的:                         本类,同包类      ------------java不建议

类中成员(属性,方法):四种都行

类:只能为public,默认

  封装的意义:保护数据的安全

        数据(成员变量)私有化(private)

        行为(方法)公开化(public)

static:

静态变量:

                static修饰

                属于类,存储在方法区中,只有一份

                通过类名来点来访问

                何时用:对象为共享的数据(图片,音频,视频等)

静态方法:

                static修饰

                属于类,存储在方法区中,只有一份

                通过类名来点来访问

                静态方法没有隐式this传递,所以不能直接访问实例变量(需要对象点,因为没有this)

                解释:

                何时用:方法的操作与对象无关(不会用对象的属性)

静态块:

        static修饰

        属于类,在类被加载期间自动执行,一个类只被加载一次,所以静态块也只执行一次

        何时用:初始化/加载静态资源(图片,音频,视频等)

final:最终的,不可改变的-----------单独使用几率低

        修饰变量:变量不能被改变

        修饰方法:方法不能被重写

        修饰类:final的类不能被继承  但是可以继承别的类

static final 常量:应用率高

        必须声明的同时初始化

        通过类名点来访问,不能被改变

        建议,常量所以字母都大写,多个单词用_分隔

        编译器在编译时会将常量直接替换为具体的值,效率高

        何时用:数据永远不变,并且经常使用

静态变量和常量

        

抽象方法:

        由abstract修饰

        只有方法的定义,没有具体的实现

抽象类:

        由abstract修饰

        包含抽象方法的类都是抽象类

                不包含抽象方法的类也可以声明为抽象类----------了解

        抽象类不能被实例化(new 对象)

        抽象类是需要被继承的,派生类:

                *重写所有抽象方法--------------变不完整为完整

                *也声明为抽象类------------------一般不这样做   

          

抽象类的意义:

  • 封装共有的属性和行为--------------------代码复用

  • 为所有派生类提供统一的类型-----------向上造型---代码复用

  • 可以包含抽象方法,为所有派生类提供统一的入口(能点出来)

    派生类的行为不同,但入口是一致的,同时相当于定义了一个标准

成员内部类:应用率低,了解

        类中套类, 外边的称为外部类,里面的称为内部类

        内部类通常只服务于外部类,对外部不具备可见性

        内部类对象只能在外部类中创建

        内部类中可以直接访问外部类的成员(包括私有的),在内部类中有个隐式的引用指向了创建它的外部类对象------外部类名.this

匿名内部类:应用率高---------------------大大简化代码

        若想创建一个类(派生类)的对象,并且对象只创建一个,此时该类不必命名,称为匿名内部类

        匿名内部类中不可以修改外面的值,因为在此处该变量默认为final的

 

补充:

1.隐式对象:

        this:当前对象

        super:当前对象的超类对象

        外部类名.this:当前对象的外部类对象

2.必须记住的,API中会用的

        外部类名.this:指代当前对象的外部类对象

        匿名内部类不能修改外面变量的值,因为在此处默认为final的

 3.小面试题:

        内部类有独立的.class字节码文件吗?

        有,

4.做功能的套路:

   先写行为/方法:

           若为某对象所特有的行为,就将方法设计在特定的类中

           若为所有对象所共有的行为,就将方法设计在超类中

   窗口调用

        若为定时发生的,就在定时器中调用

        若为事件触发的,就在侦听器中调用

接口:

         

         7.接口可以继承接口(类和类 extends   接口和接口  extends    类和接口  implements)

        8.接口的意义:

                封装部分派生类共有的属性和行为,实现多继承

                是一个标准,是一种规范

       

        public static final int NUM =5;--------默认为常量 public static final

        public abstract void show();----------默认为抽象方法  public abstract 

        常量必须声明同时初始化

        抽象方法不能有方法体

        

 实现类的重写方法必须为public

接口:封装部分共有

父类:所有共有

多态:

        表现:同一个对象被造型为不同类型时,有不同的功能

                ------对象的多态:我,你,水-------------所有对象都是多态的

                同一类型的引用指向不同的对象时,有不同的实现

                -------行为的多态:cut(),move()--所有抽象方法都是多态的

 

 向上造型可以理解为自动类型转换

强制类型转换成功的条件有两种:

        引用所指向的对象,就是该类型

        引用所指向的对象,实现了该接口或者继承了该类

不符合上面条件则发生ClassCastException类型转换异常

看指向的对象的类型与要等号左边的类型来比较,看是否可以强转

建议在强转之前先通过instanceof来判断引用对象是否是该类型

o instanceof Boo   //true

o instanceof Coo  //false

接口例子: 

补充:

    1.成员变量和局部变量是可以同名的(***同名时,访问成员变量this不可以省  this.name =name)

        成员变量:写在类中,方法外-------有默认值

        局部变量:写在方法中-----------------没有默认值

    2.java规定:成员变量和局部变量是可以同名的

                        使用的时候采取就近原则

    3.内存管理:由JVM来管理

        堆:存储new出来的对象(包括成员变量)   new出来的才放在堆    

        栈:局部变量(包括方法的参数)  ****引用类型中装的都是地址   基本类型放在栈装的值

        方法区:.class字节码文件(包括静态变量、所有方法)

        在构造方法中给实例变量做初始化

        在静态块中给静态变量做初始化

   4.数组也是一个对象,数组对象也存储在堆中,将数组的元素当作成员变量也存在堆中

声明的类型依据=的左边

重写和重载         是否重载与返回值类型,变量名称无关

成员变量分为两种:

        实例变量:没有static修饰,属于对象的,存储在堆中

                                有几个对象就有几份,通过引用打点来访问

        静态变量:有static修饰,属于类的都存储在方法区中,

                                方法区中的都只有一份,通过类名点来访问

设计规则:abstract

        将派生类所共有的属性和行为,抽到超类中-------------抽共性        泛化

        对象的行为都一样,则设计为普通方法

        对象的行为都不一样,则设计为抽象方法
 

抽象方法/抽象类的疑问:

        抽象方法存在的意义是什么?

                *保证当发生向上造型时,通过超类的引用能点出来那个方法

          既然意义只在于能点出来,那为什么不设计为普通方法?

                *若设计为普通方法,则派生类可以重写也可以不重写,而设计为抽象方法,可以强制派生类必须重写----------做了个标准,强制必须重写

final与abstract意义相反

        final不能被继承

        abstract必须被继承

代码块的执行顺序:

 

静态代码块:

构造代码块:

局部代码块:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值