黑马程序员_java复习笔记1-面向对象
来源:互联网 发布:手机软件显示网络异常 编辑:程序博客网 时间:2024/05/27 16:43
------- android培训、java培训、期待与您交流! ----------
一、类与对象
1. 类与对象之间的关系?
类是对象是一种抽象
而对象是类的一个具体化,真实存在的实体.
我们定义一个类,其时就是定义了一种引用数据类型
2. 如何对类进行分析?
类就是一类事物的归纳,要将一个类事物描述清楚,从两方面入手,一个是分析事物具有哪些外部特征,即属性,二是分析这类事物具有什么行为,即方法.
类的属性(变量)可以是任意数据类型.
3. 如何用对象?
创建对象方法:类名 对象名=new 构造函数名(参数)
使用对象
对象名.成员变量;
对象名.方法名();
4. 对象的内存分布图?
new 一个对象是,先在堆内存中开辟一片空间建立一个对象,再在栈内存是开辟一片空间建立对象名并把堆内存中对址值赋予给对象名,实现这个对象名对对象的指向,这就建立好了一个对象.
5. 匿名对象
格式:new 构造函数名();
特点:可以做为参数进行传递,只在存在的语句中有效.
6. 类中成员变量和局部变量的区别?
成员变量在本类中都有效(主方法除外),局部变量只在方法里的{}范围内有效.
成员变量存在于堆内存的对象中,所以其用完后不会马上消息,等java垃圾回收机制回收.而局部变量存在于栈内存中,用完马上消失.
另外由于成员变量存在于堆内存中,所以就算其没有初始化,也会随对象建立自动初始化为该类型的默认值.
二、封装 (关键字:private)
1. 什么是封装?
封装就是隐藏实现细节,提供公共的访问方式,
开发中常用的是用private饰类的成员,让其只在本类是有效,再提供公共的方法让外部访问被private修饰的成员属性.
2. 封装有什么用?
提高类成员安全性,使用方便,复用性高,可以控制其变化
3. 封装怎么用?
在变量类型前和方法的返回值类型前加上private,就可以私有化这个变量或方法.
然后再提供getName方法获得变量的值,用setName方法给变量赋值.
private修饰的方法放于开放的方法中,这样才能让外部访问
4. 什么时候用封装?
私有的使用。
当我们要对一个成员变量或方法进行改变和调用控制时,我们就用private私有.
5. 封装有什么特点:
封装可以修饰类的成员属性和方法,当一个成员被私有化后,只能在类中使用,不能够直接通过创建对象调用,而要通过其它公共访问方法,让外部去访问.
三、构造方法
1. 什么是构造方法?
构造方法就是类中一定存在的以类名命名的一个方法.
2. 有什么作用?
用于给对象初始化.
3. 怎么用?
格式:[修饰符]类名(){}
1.方法名必须与类名相同
2.构造方法没有返回值类型 void也没有
3.构造方法只可以用权限修饰符修饰
4,不可以用return
4. 什么时候用?
建立一个类,就要建立构造函数
5. 有什么特点?
1,当一个类中没有构造方法时,jvm加载时会为其添加一个默认的构造方法,该方法是无参空的方法.(默认的是看不到的)
2,当我们手动添加一个构造方法后,默认的构造方法就不会在添加.
3,构造方法可以重载,重载后的好处是我们可以有多种方式来实例化这个类的对象
4,只能用权限修饰符修饰,如public private,不能用static
四、this关健字
1. 有什么用?
三个代表,在类中代表对象引用成员变量
在函数中代表对象调用函数
在构造函数中代表构造函数的引用
2. 怎么用?
this只能用在方法中,代表对象的引用,因为成员变量里加载于对象创建之前.
this.成员变量名:在方法中代表对象引用成员变量
this,方法名():在函数中代表对象调用函数
格式this(变量):用于构造函数间的相互调用,而且只能放在构造函数的第一行。
然后先初始化其this调用的构造函数,再初始化本身的构造函数。
因为所有构造函数名是一样的,都是重载函数,
所以,通过变量来标记构造函数,用this去引用
3. 什么时候用?
当需要引用时?
4. 有什么特点?
this只能应用在本类中.可以修饰类的成员也可以修饰类的成员.
但凡本类功能内部使用到了本类对象,用this表示。
看到this就是有代表对象,代表哪个对象就看其所在功能被哪个对象调用。
继承
一、继承 extends
1. 什么是继承?
继承就是把两个存在关系的类,把里面共有特性提取出来,形成一个父类,或者跟据自已的特性派生出来一个子类,然后子类通过继承拥有父类的所有属性和方法,子类可以可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
继承分为普通继承和多重继承.
普通继承 A 继承B
多重继承 C继承B, B又继承A.那么C中具有A和B的所有属性.----这个不是多继承,要区分开来
2. 继承有什么有?
复用性强,子类通过继承就拥有了父类的所有属性和方法,子类可以直接使用这些方法,也可对在此基础上增加新的数据或新的功能,若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性,使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
通过继承可以展现多态,Java中的多态的两种最基本表现形式:重载与重写
3. 继承怎么用?
子类类名后加上extends 父类名,就实现在继承
继承属性
继承属性时,子类拥有父类除private修饰外的所有变量
通过super可以调用子类中隐藏的父类属性.当子类有同名变量的话,
用tthis和super来区分子类成员和父类成员. super.变量名super.方法名();
如果无同名变量,那么也可以用this来调用父类属性.
但一般不在父类中定义类变量,,因为类变量可以直接用类名访问,如果定义了,那么一般是对子类做一些限制
继承方法
继承方法可以对方法什么也不做,也可以对方法进行重写
重写就是让方法名一样,但里面给其在原有基础上进行扩展或重新定义新的功能.
重写时需要注意的是权限修饰符,子类不可以使用比父类更严格的权限修饰符.
也就是子类的权限只能更宽泛,不能更严格,public>protected >什么都不写>private
重写的目的,两个目的,一个是对被重写的方法进行功能性扩展, 另一个是重新建立新的功能行为.
也可以通过super来调用被隐藏的行为.同样,如果没有重写,那么也可以用this调用.
继承在构造函数中的用法
在构造函数中,默认在第一行调用super(),父类的无参构造,一旦我们指定后,super(参数),或this(),后,就不会再自动调用了.
4. 继承什么时候用?
如果类中的特性或行为与被继承类中的行为,特性功能相同,可以使用继承。不可以为了去使用其某个行为而继承
父类是将所有子类中共性的行为抽象出来的。
5. 继承有什么特点?
一个子类中只能有一个父类,就是只能单继承
java中支持多重继承,就是B继承A,C又继承B,那么C拥有A和B的所有成员
java中继承能继承父类的除private外所有的成员.
二、super
super也只能用于方法中!
super与this基本相同,但有区别,this(),在构造函数中不一定要有,但super()如果没有指认,就一定有.
三、final
可以修饰类,方法,属性
类:修饰的类不可以被继承
方法:修饰的方法不可以被重写
属性:修饰的属性,是常量,不可以更改.
但如果修饰的属性没有赋值,还是默认值的情况下,允许在构造函数中赋值一次.(注意:如果同时被static和final修饰则不允许)
四、继承中的构造函数
继承父类所有非private成员,不包括构造函数.
五、抽象abstract
1. 什么是抽象?
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。或这个方法是这类事物所共有的,然而每个子类的实现方式不一样.抽象在java只能修饰类与方法,被其修饰的类就叫抽象类,被其修饰的方法就叫抽象方法.
2. 抽象有什么用?
抽象主要是为了方便继承的.
抽象修饰的类不可以建立对象,其修饰的方法没有具体实现,这样就可以子类可以跟据自已的需要实现自已的内容
3. 抽象怎么用?
在类或方法前加abstract.,加了abstract的方法就不可以写{}了
格式:[修饰符]abstract方法名(参数);
4. 什么时候用抽象?
当子类都具备这项功能,但具体实现不一样,那么就可以用抽象.
5. 抽象有什么特点?
抽象类不可以建立自已的对象,
抽象方法没有具体实现
抽象类里不一定有抽象方法,但有抽象方法一定是抽象类
抽象abstract不可以和final共存,其作用刚好相反
也不可以和static共存,static中只能用静态成员,而抽象方在重写时如果只用静态成员,则意义不大
抽象类的子类必须重写所有父类所有抽象方法,但如果子类是抽象类除外,因为抽象类允许存在抽象方法.
多态
一、接口 interface
1. 什么是接口?
java为了弥补单继承的缺陷,定义了一功能接口,可以多实现.接口是java中一系列方法的声明,是一些方法特征的集合, 其里面所有的方法都是抽象方法,所以也可以称其为一个特殊的抽象类,里面的成员有固定的修饰符,不写也会自动加.
成员变量前默认加:public static final
成员方法前默认加 public abstract
2. 接口有什么作用?
接口就是用来实现的,接口一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。那么接口就类似于制定了规则,外部实现其的类必须重写其所有方法.
接口可以多实现,那么就大大增强扩展性.
通过接口实现两个功能的对接,会大大降低二者耦合性.有利于程序的维护.
3. 接口怎么用?
格式:
interface 接口名
{
[public static final] 属性
[public abstract] 方法
}
interface 接口名 extends接口1,接口2....... -------接口的继承,支持多继承
{
不用重写方法
}
class 类名 implements接口1,接口2......-----类对接口的多实现
{
重写所有方法;
}
abstract class 类名 implements接口1,接口2,......
{
方法可以重写也可以不重写
}
4. 接口什么时候用?
当一个类只有方法的特征,而方法的实现各不相同,同是这个功能又有较强的括展性
这个时候就可以定义一个接口,
5. 接口有什么特点?
接口没有构造函数
接口的属性都是常量
接口可以多实现,因为接口中的方法全是抽象方法,没有具体方法实现,我们如果发现不同接口中出现相同的方法,那么只需要实现一次.
接口与接口可以多继承
抽象类与接口的区别
1.类是单继承,接口可多实现
2.继承 is a实现 like a
3.抽象类中可以有实体方法,接口中全是抽象方法
二、多态
6. 什么是多态?
多态就是同一实体有多种表现状态
面象对象语言的核心就是多态,多态即一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
方法的重载与重写是多态的两种基本表现形式
7. 多态有什么用?
多态可以实现父类引用指向子类对象.
父类的引用也可以接收自己的子类对象。
这样大大提高了程序的扩展性和可维护性
因为,父类引用可以指向子类对象且可以接收子类对象,那么假如程序子类对象要需要修改就不要再改引用名,直接换一个对象就可以了,动一下引用名,会牵涉到的代码远远大于改其指向对象.
8. 多态怎么用?
格式:父类名 对象名=new子类名()
在方法的参数中方法名(父类类型即父类名 子类引用)
多态父类的引用只能调用与子类继承或实现过去的方法.
如果调用属性,那么结果看引用,如父类有一个int x =4,子类有一个int x =5,那么多态的时候,引用代表的值是4,和父类一至,也就是引用所属的类里面的变量值.
如果调用方法结果看引用的对象
而如果是方法的话,就是调用子类重写的方法,如果没有重写,那就是调用子类里隐藏的继承的父类方法
如果要调用特有属性那么要强转
类型转换:向上转换是自动的:
比如:B继承A,那么A a = new B(),表示B类型向更高的A类型转换,因为A类包含B类,所以是向上转,这是自动的
强转可以先判断下两个类是否是从属关系,也就是看类是否是继承或实现
格式 :引用instanceof 类型
比如看a引用是否是A类型, a instanceof A 如果是为true不是结果为false
而如果a要转成B类,这就是向更低的子类,则要强转a=(B)a;[转完后才能调用子类特有属性
实现和继承用法一样 只不过叫法不一样 不叫父类引用指向子类对象,而是叫接口回调.
多态中父类的引用调用属性时,是父类的,调用非静态方法,是子类的重写方法,调用静态方法,即使子类重写了方法,实际调用的还是父类的.
9. 多态什么时候用?
多态在有继承或实现的类中使用,
开发中基本都是用父类引用指向子类对象以提高代码的扩展性,并便于维护
10. 多态有什么特点?
多态有三种,可以是一个类的多态,也可以是一个抽象类,也可以是一个接口,但一般是抽象类和接口多态用的多
我们只能使用父类,接口中定义的行为,而不能去使用子类特有的行为
要使用必须强转回对象类引用
方法的重载与重写是多态的两种基本表现形式
多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员_java复习笔记1-面向对象
- 黑马程序员_java面向对象学习笔记
- 黑马程序员_Java基础笔记(面向对象1)
- 黑马程序员_java基础复习二面向对象
- 黑马程序员_java面向对象1
- 黑马程序员_Java面向对象1
- 黑马程序员_Java面向对象1
- 黑马程序员_java面向对象
- 黑马程序员_JAVA面向对象
- 黑马程序员_Java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- 黑马程序员_java面向对象
- Linux 常用命令
- 第二章第11题
- hdu 1374 求三角形外接圆的半径
- memcache
- UIScrollerView和UITableView下拉刷新,上拉加载更多
- 黑马程序员_java复习笔记1-面向对象
- 【转】hash_map 与 hash_set 详解
- 不同JS环境use strict对重复属性处理的差异
- 好题flag--(6.7)
- 第二章第21题
- CSS3 icon font完全指南(CSS3 font 会取代icon图标)
- Java NIO系列教程(三) Buffer
- ZigBee初探
- webfont 平台推荐