黑马程序员_java_面向对象总结

来源:互联网 发布:脸部比例测试软件 编辑:程序博客网 时间:2024/06/02 03:30
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


面向对象是学习java语言的重要思想,所以学好面向对象是非常重要的。
通过黑马视频教程的学习,我对面向对象所涉及的内容做了以下总结:


一、面向对象
(1)理解面向过程及面向对象
面向过程:是以函数为基础,强调的是过程.(强调的是这个方法可以实现什么功能)


面向对象:是以对象为基础的,它强调的是这个对象可以完成什么功能


(2)面向对象的思想特点:


A:是更符合人们的思考习惯的思想
B:把复杂的事情简单化
C:让程序员从执行者变为了指挥者


(3)面向对象的三大特点:
A:封装:是指隐藏对象的属性及实现细节仅对外提供公共的访问方式。


B:继承:是指在一个现有类的基础上去构建一个新的类,构建出来的类称为子类,现有类称为父类,子类会自动拥有父类所有的可继承的属性和方法(通过继承子类可以直接访问父类的非私有成员(包括成员变量以及成员方法))。
好处:a.提高代码的复用性
      b.让类与类之间产生关系,是多态的前提
特点:java的类只支持单继承不支持多继承,但是可以多层继承
子类访问一个成员变量时的查找规则:
a:首先在子类的局部位置找 有就用
b:在子类的成员位置找 有就用
c:在父类的成员位置找
d:父类成员位置没有就报错


C:多态:对象在不同时刻表现出来的不同状态。
3个前提条件:
A.要有继承关系
B.要有方法的重写
C.要有父类引用指向子类
好处:提高代码的拓展性和可维护性
多态的弊端:父类引用无法使用子类特有功能
解决办法:可以把父类向下转型


二、对象
(1)对象:就是类的具体实现,体现
(2)类与对象之间的关系:
就是不断创造对象,指挥对象去做事情(对象调用方法)
(3)匿名对象:
定义:匿名对象就是没有名字的对象【 new 类名()】
应用场景:当对象只使用一次的时候可以考虑使用匿名对象
(举例:一次性筷子)
特点:匿名对象可以当做实际参数进行传递
(方法的形式参数位置不光可以传递八种基本数据类型.也可以传递
引用数据类型)


三、类
(1)类的构成
a:类:属性和行为的集合,它是一个抽象的概念
b:成员变量:其实就是属性
成员方法:其实就是行为
局部变量:行为里的变量
实例变量:成员变量中非静态的变量
类变量:成员变量中静态的变量
(区别成员变量和局部变量:
成员变量:a.定义在类中方法外
b.初始化赋值为String null,int 0,char 空
c.存在堆内存中,随类的加载而加载
局部变量:a.定义在方法中
b.没有初始化值
c.存在栈内存中,依托方法而存在)
c:使用变量的规则:
首先在局部位置找,如果有就是用,如果没有就在成员位置找,
有就是用,没有就在父类中找.父类中没有就报错.
    d:代码块:静态代码块:当类被执行时,代码块就会被执行,由于类之加载一次,因此静态代码块只执行一次。(通常用来对类的成员进行初始化)
static{ 
....................
}
构造代码块:定义在类中方法外 
可以把构造方法中的共性内容放在里面
局部代码块:定义在方法中
可以让局部代码块中的数据尽早的消失,提高内存利用率
执行顺序:
父静态代码块
子静态代码块
父构造代码块
父构造方法
子构造代码块
子构造方法
(2)构造方法
    特点:A.方法名与类名一致
     B.没有返回值类型
     C.没有具体返回值


    作用:给对象进行初始化


    注意事项:
A.如果未给出构造方法,系统会默认给出无参构造方法
B.一旦给出构造方法,系统将不再提供无参构造方法
C.构造方法可以重载


    set方法与构造方法:
A.给成员变量赋值:set方法与构造方法都可以给成员变量赋值
 (推荐使用set方法给成员变量赋值)
B.set方法的存在就是为了给成员变量赋值,而构造方法是为了
  初始化对象(随便对成员变量赋值了)


    单例模式 : 是java中的一种设计模式,它指设计一个类时,需要保证在整个程序运行期间针对该类只存在一个对象。
饿汉式:a.私有化构造方法
b.创建私有并静态的本类对象
c.定义公有静态方法,返回该对象
class Single {
private Static Single INSTANCE =new Single ();
private Single () {}
public static Single getInstance () {
return INSTANCE;
}
}
简化成--
class Single{
private Single () {}
public static final Single INSTANCE=new Single();
}


    关于构造方法的问题:
问1:为什么父类的构造会在子类之前执行?
A:因为子类的构造方法中第一行会默认有一个super()会调用父类的无参构造.
B:因为可以用子类对象调用父类中的非私有成员,那么必然要对父类进行初始化


问2:如果父类中没有无参的构造方法,那么,子类的super()就调用不到父类的构造了肿么办
可以在子类中手动给出 super(参数)来访问父类的带参构造


问3:一个类的构造方法第一行一定有个super(),假如说这个类没有继承的话,那么super()访问的是谁呢?
访问的是Object类中的构造方法.
(3)内部类
概念:将一个类定义在另一个类中,那么这个类就可以成为内部类(嵌套类,内置类)
内部类的访问特点:A.内部类可以直接访问外部类的成员,包括私有成员
 B.外部类想要访问内部类的成员,必须创建一个内部对象


(4)抽象类
使用关键字abstract修饰的类称为抽象类,被abstract修饰没有方法体,子类继承父类要重写父类所有抽象方法。


抽象类的基本特点:
抽象类:类用关键字 abstract 修饰
抽象方法:方法声明要用 abstract, 第二没有方法体


抽象类的成员特点:
成员变量:既有变量,也有常量
构造方法:有构造方法
成员方法:既有抽象方法,也有非抽象方法


内部类的分类:
成员内部类:定义在类中方法外的内部类。
局部内部类:定义在方法中的内部类。
静态内部类:用静态修饰一个成员内部类,可以被成为静态内部类,它可以在不创建外部对象的情况下被实例化
匿名内部类:没有名字的内部类,通过匿名内部类就是获取一个该父类的一个子实现(继承)对象。


格式:外部类.内部类 变量名=new 外部类.内部类();




注意:有抽象方法的类一定是抽象类(或者是接口)
     抽象类中可以没有抽象方法.
     abstract 不能与final ,static ,private 关键字共存


(5)接口
  概念:如果一个类中的所有方法都是抽象的,则可以将这个类用另一个方式来定义,即接口。在定义接口时,需要使用interface关键字来声明。
  接口的特点:A.接口可以被多实现(如果是抽象类只需实现部分方法)
B.一个类可以在继承另一个类的同时,还可以实现多个接口
(此时extends必须位于implements之前,接口间用逗号隔开)
C.接口可以多继承接口(接口间用逗号隔开)
  接口的成员特点:
A:成员变量:接口中只有常量
(因为接口中的变量有默认修饰符 public static final)
B:构造方法:接口中没有构造方法
(接口中的常量是static修饰 接口中的方法没有方法体)
C:成员方法:接口中只有抽象方法
(因为接口中的 方法有默认修饰符 public abstract)
  接口的思想特点:
A.接口是对外提供规则(是对外暴漏的原则)
B.接口是对外的功能拓展
C.接口降低了耦合性(即对象之间的依赖性)
D.接口可以用来多实现
  类与接口的关系
A:类与类的关系
是继承关系(只能单继承,但是可以多层继承 )
B:类与接口的关系
是实现关系(一个类在继承一个类的同时还可以实现多个接口)
C:接口与接口的关系
继承关系(可以单继承也可以多继承,因为接口直接不会出现方法调用不明确的情况)
D:类与抽象类的关系
继承关系
 
抽象类和接口应该如何定义?
A.抽象类里面定义的是这个体系的共性内容
(可以把一模一样的方法定义为实体方法,把叫法一样但是实现的过程不一样的方法定义为抽象方法)
B.接口中定义的是扩展功能


(6)包
包:相当于一个放在许多类的文件夹,通常是功能相同的类放一起
格式 : package 包名(全部小写,可以单级包也可以多级包)


如果需要带包编译和运行的话从上到下的顺序?
package 包名>>import 导包>>定义类 class


不同包下类之间的访问和导包问题
常见问题:
A.提示:找不到Demo类
解决方案:使用全路径名
B.提示:Demo类无法访问
解决方案:对类使用public修饰


(7)关键字
  A:static
如果某一对象是被该类下的所有对象所共享的,就该使用static修饰。
如果这个属性是该类下所有对象的特有属性则不能使用静态。


被static关键字修饰的成员有以下特点:
A.随着类的加载而加载
B.优先于对象而存在
C.可以直接通过类名调用(类名.调用变量或方法)
注意事项:
A.静态方法里是不能使用this的
(因为this是对象创建时存在的,而静态是随着累的加载而加载的)
B.静态方法智能调用静态的成员变量以及成员方法
C.被静态修饰的成员均可通过类名调用
(也可通过对象调用,但是建议使用类名调用)
  B:this与super
this和super的区别:
this :代表的是本类对象的引用
super :代表的是父类内存空间的标识(可以理解为父类的对象引用)

成员变量: this.变量名调用本类成员位置的变量
  super.变量名  调用父类成员位置的变量
成员方法: this.方法名调用的是本类方法
  super.方法名  调用的是父类的方法         


构造方法(写在构造方法之中): 
this(参数) 调用本类中其他的构造方法 
super(参数) 调用父类中的构造方法


注意:
A.子类的构造方法如果使用this,那么默认的super就没了
B.当this 和 super在构造方法中调用其他构造方法时,必须放在第一行,且只能使用一次,不可在成员方法中使用,因此这种情况this和super不能同时使用。
C.静态方法里不能使用this,super
  C:final
被final修饰的:
类: 不能被继承
成员变量: 就变成了一个常量
成员方法: 不可以被重写



0 0