java中第七章面向对象的笔记

第七章面向对象编程
理解面向对象:
面向对象是相对面向过程而言;
面向对象和面向过程都是一种思想;
面向过程:强调的是功能行为,算法第一,数据结构第二,程序=算法+说数据结构;
面向对象:程序=对象+对象+......;数据结构第一,算法第二;
对象的概念:对象时现实存在的具体事物;可以是有形的,如某个人,某种事物,也可以是无形的,

如某项计划,某次商业交易;

属性也叫做全局变量;也叫实例变量;对象也叫实例;

成员变量:在方法外定义的变量就叫做全局变量;

全局变量的特点:在类中的任何方法中直接访问;

全局变量可以不初始化,可以直接使用;

因为JVM为所有的全局变量赋予一个默认值;

 

局部变量:1、局部变量只定义在局部范围,如:方法体,代码块;方法参数也是局部变量

局部变量存在于栈内存中;

 

局部变量的特点:JVM不会为局部变量赋予一个默认值;

全局变量和局部变量的区别:

1、全局变量直接定义在类中;

局部变量定义在方法中,方法参数,语句中;

2、全局变量在这个类中有效;

局部变量只在自己的所属的大括号内有效,大括号结束,局部变量失去作用域;

3、全局变量存在于堆内存中,随着对象的产生而存在;消失而消失;

局部变量存在于栈内存中,随着所属方法的运行而存在,随着所属方法的结束而是释放;

创建对象:每创建一个对象,都会在堆内存中每个对象的属性分配独立的内存空间,但是不会每次都为方法分配独立的内存空间;

一个类中的所有的方法,在内存中都各自只占用一份内存空间,为该类所有的对象共享;

这是因为,方法一般都是用来操作数据的,对于不用对象来说只是操作数据不同,而操作数据方式是相同的,所以没有必要为每个对象的方法都分配一份独立的内存空间;

面向对象:

封装:指隐藏对象的属性和实现细节,不让外部直接访问,仅对外提供访问方式

private私有的;

是一个权限修饰符;

用于修饰成员(成员变量和成员方法)

被私有化的成员在本类中有效;

构造方法:函数名和类名相同;不用定义返回值类型;没有具体的返回值;

用作:给对象初始化; 调用:new操作符;

每创建一个对象都得调用构造函数一次;

如果类中没有显示声明构造方法

JVM会提供一个无参的构造方法;

如果类中有显示声明的构造方法时;

JVM不会提供一个无参的构造方法;

显示声明构造方法:PersonString nameint age{this.name=name;

this.age=age;}

 

 

继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

多个类可以称为子类,单独这个类称为父类或者超类。

子类可以直接访问父类中的非私有的属性和行为。

通过extends关键字让类与类之间产生继承关系。

                             意义:继承的出现提高了代码的重用性;继承的出现让类与类之间产生了关系,提供了多态的前提。

java 只支持单继承,不支持多继承。

      一个类只能有一个父类,不可以有多个父类。

java 支持多层继承(继承体系)

        class A{}

        class B extends A{}

        class C extends B{}

定义继承需要注意

      不要仅为了获取其他类中某个功能而去继承

      类与类之间要有所属(is a’)关系,如:狗是动物的一种。

super关键字:

使用spuer关键字,super代表父类对象;

访问父类构造方法:

super();

supername);在子类构造方法中调用且必须是第一句;

访问父类属性:

super.name;

访问父类方法:

super.print();

superthis的用法相像;

this代表本类对象的引用;

super代表父类的内存空间的标识;

当子父类出现同名时,可以用super进行区分;

子类要调用父类构造函数,可以使用super语句;

super调用构造方法,只能是第一句;

方法重载:首先看方法名,然后看参数列表;

如果方法名相同,看参数列表,参数类型相同时,看个数是否相同,如果个数不相同时,就不是方法重载;

同一类中,同名不同参数的方法的重载方法;仅有返回类型不同方法不能重载,即方法重载必须方法签名不同;

方法签名是方法名+参数列表;

/*方法重写(方法覆盖):子类重写父类的方法;同样的方法名;在子类中写super.方法名();

在子类中扩展一些功能;子类从写的时候不能比父类的范围小*/

方法重写:

子类出现与父类一模一样的方法时,会出现重写操作,也称为覆盖或者复写

在子类重写方法中,继续使用父类被重写的方法,可以通过super.函数名获取;

方法重写的注意事项:

重写方法时方法签名和返回值类型必须一样;

重写时,子类方法权限一定大于等于父类访问权限;

父类中的私有方法不可以被重写;

静态只能重写静态

构造方法:可以创建一个对象;方法:实现一种功能;

方法重载和方法重写

位置 方法名 参数表 返回值 访问修饰符

方法重写 子类 相同 相同 相同或 不能比父类更严格

是其子类

 

方法重载 同类 相同 不相同 无关 无关

final关键字:

final可以修饰类,方法,变量;

final修饰的类不可以继承;

final修饰的方法不可以被重写;

final修饰的变量是一个常量,只能被赋值一次;

内部类只能访问被final修饰的局部变量;(jdk小于1.8以下没有这个特性)

首先想类、属性、对象,然后写出方法,最后考虑对象

多态:程序中的多态:同一个引用类型

使用多态实现的思路:子类是父类的多态

编写父类;编写子类,子类重写方法;运行时,使用父类的类型,子类的对象;

liskov替换:

凡是父类对象出现的地方都可以用子类对象来替换

构造方法:没有返回值类型,有返回值;

Static关键字:

用于修饰成员(成员变量和成员函数)例:static String name

被修饰后的成员具备以下特点:

随着类加载而加载,随着类的消失而消失;

优先于对象存在;

被所有对象所共享                                                                                     

可以直接被类名调用;

静态方法只能访问静态成员;

静态方法不能出现thissuper关键字;因为对象还没有产生;

静态成员在创建对象之前产生的,其他的成员在创建对象之后产生的;

什么叫类变量(静态变量)?

答:修饰成员变量的称之为类变量;修饰成员方法的称之为静态方法;

抽象类和接口:

抽象的定义:抽象是把多个事物共性抽取出来,本质就是把我们关注的内容抽取出来。

什么是抽象类?

Java中可以定义没有方法体的方法,该方法由其子类来具体实现。该没有方法体的方法我们称之为抽象类。

格式:访问修饰符 abstract返回类型 函数列表();

抽象类不可以实例化,也就是不可以用new创建对象;

抽象类通过其子类实例化,而子类需要覆盖掉抽象类所有的抽象方法后才可以可以创建对象,否则子类也是抽象类;

不同点:

1、一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足;

2、一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。

3、一般类可以被实例化;抽象类不可以被实例化。

开放封闭原则:

对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

对修改封闭:

意味着类一旦设计完胜就不该改变;

接口成员特点:

成员变量:只能是静态成员和抽象方法;

java接口是对功能的扩展;

通过实现接口,Java类可以实现多实现;

一个类可以同时继承一个父类并且实现多个接口;

接口和接口之间可以通过使用extends来产生继承关系;

成员变量:只能是静态变量;

修饰符public static final

 

没有构造方法;

类与类:继承关系,只能继承,可以多层继承,不可以多继承;

类与接口:

实现关系,可以单实现,也可以多实现;

可以在继承一个类




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值