您的位置:首页 > 编程语言 > Java开发

java面向对象笔记总结

2017-07-24 21:47 323 查看
类之间的关系:

关联关系:在代码层面的表现形式,两个不同类中,一个类的对象作为另一个类的成员变量

依赖关系:在代码层面的表现形式,两个不同的类中,一个类的对象作为另一个类中方法的形参

聚合关系:在代码层面的表现形式与关联关系一致,只存在语义的差别

组合关系:在代码层面的表现形式与关联关系一致,只存在语义上的差别,例如:

public class MyDate{

private Year yera;

private Month month;

private Date date;

}

实现关系:

继承关系:

封装:

封装就是将属性私有化,再提供公有的方法访问私有属性

具体做法:

1.修改属性的可见性来限制对属性的访问(访问修饰符 private、protected)

2.为每个属性提供一个赋值方法setter()和取值方法getter(),用于对这些属性的访问

3.通过构造器对属性进行传递值,或者通过创建对象,调用属性的setter()方法和getter()方法

通过封装,可以实现对数据访问的限制,同时增加程序的课维护性

访问修饰符:

private:只能被当前类访问

默认 :只能被同一个包中的类访问

protected:可以被所有子类访问,可以被同一个包中子类访问,也可以被在不同包中的子类访问

public: 可以被本项目中的所有类访问

关键字:

java中所有关键字都是小写,大写都不是关键字。goto也是关键字,但在java中至今未使用

final:用于修饰类,属性,方法;被final修饰类不可被继承,被final修饰的属性不可被改变(一般结合static用于表示常量),被final修饰的方法不允许被重写

static:java中static元素与对象无关(凡是对属性,方法的调用都必须通过对象),与类直接相关,在类加载的时候,所有的static元素都会被初始化,static可以用于修饰属性,方法,类(内部类),被static修饰的元素可以直接通过"类名.属性名","类型.方法”直接访问,一般static元素用于不需要反复创建(对象)以及频繁使用时(一般用于工具类)

非static元素不能再static语句块(静态块,静态方法)中使用

abstract:关键字用于修饰类,以及方法,被abstract修饰的类称之为抽象类,被abstract修饰的方法称之为抽象方法

instanceof:判断一个对象是否是另一种对象类型(例如:if(Object obj instanceof Student)判断obj是否是一种Student类型)

继承:

一个类通过对另一个类的继承,实现类的复用

protected关键字通常用来修饰继承关系中父类的方法

子类立继承父类:

1.子类可以使用父类中非私有的属性和方法

2.java中只能单继承(一个子类只能继承一个父类,一个父类可以有多个子类),但可以通过多重继承以实现多继承。

3.构造器的执行并不代表对象 的创建,一旦出现new关键字,则代表对象的产生

4.构造器不能被重写,但是可以在子类中通过super关键字调用父类构造器

5.子类对象在完成构造时必先调用父类构造器(但不是创建父类对象)完成初始化操作

6.子类继承父类时,如果父类中只有一个构造器(此构造器不是默认构造器时),子类中必须声明或者调用父类中指定的构造器(也就是说子类构造器器中必须有父类构造器中参数,再加上子类自己需求的参数)

7.在子类中可以使用super调用父类中非私有的元素(成员变量,构造器,方法)

方法重写:

方法重写发生在存在继承关系的子类中,与子类重写父类中的方法,对方法内部重写以达到子而立需求

注意事项:

1.被重写的方法 名称,参数(个数,类型,顺序)、返回值类型必须与父类保持一致

2.子类重写父类方法时,被重写的方法的访问权限不能低于父类方法

3.构造器不能被重写

重写与重载都是多态的一种实现策略

方法重载:

方法重载

构造器也可以实现方法重载

方法重写与方法重载的区别:

方法重载(overload)与方法重写(override)区别:

重写重载都是多态的一种实现策略,方法的多态,方法重载通常情况发生在同一个类中包括存在继承关系的两个类中,主要表现形式为,类中包括多个同名的方法,但是方法的参数(类型,顺序,个数)必须有一项不一致,构造器也可以重载,重载与返回值无关;重写一般发生在存在继承关系的子类中,子类重写父类的方法,被重写的方法必须保持与父类结构一致(方法名,参数,返回值),子类重写的父类方法必须保持访问修饰符范围不能小于父类,构造器不能被重写

==与equals的区别:

==:基本类型比较时,比较的是数值;引用类型比较时,比较的是内存中存放数据的地址

注意:两个对象在比较时,构造器的执行并不代表对象的创建,但是只要有new关键字出现就代表创建了一个对象

例如:

super():代表调用父类构造器

equals :默认实现也是使用的“==”但是可以通过对equals方法以及HashCode的重写,达到预期目的

HashCode表示对象位于JVM内存中的地址,如果两个对象的HashCode一致则表示对象是同一个

语句块:

游离块:在类中以普通代码块的形式({})存在,游离快的执行与对象构造有直接关系,在对象构造之前执行,执行次数与对象创建次数保持一致

静态块:游离块另一种表现形式,使用static关键字修饰游离块,静态块不会反复执行,一般用于资源的开启以及获取,包括数据库的驱动;静态块的执行与对象构造无关

单例模式:

步骤:

1.定义一个私有的对象变量

2.提供一个私有的构造器

3.公开一个静态的获取创建对象的方法,其返回值为创建的对象

懒汉模式:

public class Singleton{

private Singleton instance;

private Singleton(){}

public static Singleton getSingleton(){

if(instance == null){

instance = new Singleton();

}

}

return instance;

}
4000

饿汉模式:

public class Singleton2{

private Singleton2 instance2 = new Singleton2();

private Singleton2(){}

public static Singleton2 getSingleton2(){

if(instance2 == null){

instance2 = new Singleton2();

}

}

return instance2;

}

内部类:

内部类提供了比方法更好的封装型,可以通过内部类实现类的"多继承",同时也可以解决类中方法同名(重载)问题

普通内部类

全局内部类,与普通法声明在同一个级别,不允许在普通内部类中定义静态元素

静态内部类

嵌套类,在一个类的内部声明 一个静态的内部类

局部内部类

在局部内部类的方法中如果需要使用外部方法的局部变量,则外部方法的局部变量必须声明为final(延长局部变量生命周期),局部内部类可以无限制的使用成员变量

匿名内部类

图形界面中的事件监听,Android

抽象类:

当一个类中包含的信息(属性和方法)不足以表示一个具体对象时,此时该类会定义为抽象类,抽象类一般都会包含至少一个抽象方法

声明规范注意事项:

1.使用abstract修饰

2.抽象类包含构造器,但是不允许实例化

3.抽象类中包含已实现和未实现的方法

4.抽象类通常是由子类继承然后对类的中未实现方法进行具体实现

5.一个抽象类可以继承另一个抽象类

6.一个普通类如果继承抽象类(抽象类中包含未实现的方法),则子类必须对抽象方法进行实现

多态:

方法重写与方法重载都是一种实现多态的策略

上塑造型:父类引用指向子类对象

为父类new创建子类对象

注意事项:引用父类只能使用子类中从父类继承的方法和属性,不能调用子类独有的方法

接口

是一些常量以及未实现方法的集合(jdk1.8之后可以使用默认default修饰方法),不同于类,不是一个传统意义上的类

接口是一个特殊的抽象类,不是一个传统意义上的类,接口指代一种标准

1.接口没有构造器

2.接只口不能实例化

3.内部只能包含未实现的方法以及常量

4.通常是由实现类对接口进行实现

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息