面向对象知识点回顾

static关键字

概念:多个对象共享同一份数据,是静态的,可以修饰成员变量和成员方法,同时还可以修饰代码块和修饰类,但是必须是内部类。

static关键字特点

1.随着类的加载而加载

2.静态变量属于类不属于对象

3.被类的所有对象共享

4.静态的内容存在于方法区的静态区

5.static是共享的,不变的,放在方法区,静态代码块在类加载的时候就会执行,并且只执行一次

static的使用

1.可以通过类名调用

2.类名.静态变量

3.类名.静态方法

4.通过读写方法访问

static关键字应用场景

不想创建某个类的对象,而希望直接访问该类的某些属性或方法。

static关键字注意事项

1.在静态方法中是不能使用this和super关键字。

2.静态方法只能访问静态的成员变量和静态的成员方法。

3.全是静态方法的类一般在开发当中被看做工具类,例如Math类、Arrays 工具类。

4.非静态环境可以访问静态变量

static关键字主要有四种用法:

1.用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;

2.用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;

3.静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键;

4.静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。

静态修饰方法的意义

1.简化代码

2.静态方法用来访问静态成员

3.编写工具类

*构造方法私有

*成员方法添加static关键字修饰

代码块

1.概念:使用”{}”括起来的一段代码

2.分类:根据位置可分类

* 普通代码块:直接在方法或语句中定义的代码块

* 局部代码块: 定义在局部位置,限定局部变量的作用域

* 构造代码块:定义在成员位置,直接写在类中的代码块,抽取多个构造代码块的重复代码,从而简化代码

* 静态代码块:定义在成员位置,在类加载的时候执行,只能够执行一次

* 同步代码块:定义在局部位置

静态变量和非静态变量的区别

1.构造方法、构造代码块、静态代码块的执行顺序:静态代码块 > 构造代码块 > 构造方法

2.静态代码块在类加载的时候执行只执行一次

3.构造代码块在每次访问构造方法之前执行,可以执行多次

4.构造方法每次创建对象的时候执行,可以执行多次

包的概述

*本质就是文件夹

*分门别类地管理Java文件

*处理同一个文件夹中类名重名的问题

包的声明:

package 包名1.包名2....;

包的导入:

import java.util.Scanner;

包的特点:

1.同包下的类相互调用不需要导入

2.在同一个类中使用不同包中的同名类,需要显示导入,例如Date

ava.util.Date date = new java.util.Date();

3.如果一个类没有包,那么默认在default包下,该包下的类永远无法被外界访问,只能够在同包下访问

4.包的声明必须出现在Java文件的第一句

5.如果希望导入一个包中所有的类 java.util.*;

6.java.lang(核心包)包下的类不需要导入

7.在写一个类的时候千万不要和系统的类重名

JDK中常用的包:

1.java.lang 包含了Java中一些核心的包 String Object Math Arrays

2.java.awt: 包含了Java中一些窗口图形化的相关类

3.java.util: 工具包

4.java.net: 网络包

5.java.io: 输入输出流

super关键字

this和super用法类似,this代表本类引用,super代表父类引用。

this和super的对比使用

1.访问成员变量

this.成员变量 super.成员变量

2.访问构造方法

this():访问本类无参构造 this(参数列表) 访问本类带参构造

super():访问父类无参构造 super(参数列表):访问父类带参构造

3.访问成员方法

this.成员方法():访问本类成员方法

super.成员方法():访问父类成员方法

this和super的区别

1.this可以理解为当前对象,谁调用this就代指那个调用者对象,

2.每次创建一个对象,默认都会创建一个this变量指向同一个堆区空间

3.super本质是父类存储空间的标识,但是你可以理解为父类对象,

那么同样可以使用super这个关键字来访问父类的成员

注意:

1.任何一个类的无参或者带参构造方法的第一句都默认省略 super();

2.任何一个类都直接或者间接继承自Object类

3.为什么设计Object类,满足了万事万物皆对象的原则

访问根类Object的无参构造方法的意义何在? - 加载Object类中静态成员和静态代码块

4.创建一个子类对象默认会去调用父类的构造方法,那么有没有在创建子类对象的同时也创建了父类对象呢?

没有创建父类对象,本质就相当于访问了一个普通方法,创建对象开启空间需要new关键字

5.super访问父类带参构造方法的意义? -- 帮助子类初始化父类继承下来的成员,简化编程

6.静态环境/静态上下文(static修饰的方法),不能够出现this和super

7.super必须出现在构造方法的第一句

8.this和super不能够共存

继承

概念:

类是对一批对象的抽象,继承是对一批类的抽象

继承的格式:

类和类之间的关系:

*继承 (is a)

*组合 (has a)

*通过extends关键字可以实现类与类的继承

*class 子类类名 extends 父类类名 { }

*被继承的这个类称为父类,基类或者超类

*继承的这个类称为子类或者派生类

继承的特点:

*1.通过extends关键字,实现了继承之后,让类与类之间产生了关系,建立关系是好还是坏? 有好有坏

*2.继承的本质就是抽取共性代码,多个重复代码的向上抽取,简化代码 BaseDao BaseActivity

*3.类是对一批对象的抽象,继承是对一批类的抽象

*4.父类又被称为超类,或者基类,子类又被称为派生类

*5.Java是面向对象语言,万事万物皆是对象,为了满足这个设计原则,所有的类都直接或者间接继承自Object类

继承的好处:

*1.简化了代码

*2.提高了扩展性

*3.提高了可维护性

*4.开闭原则: 对扩展开放,对修改关闭

继承的缺点:

*开闭原则: 对扩展开放,对修改关闭

*高内聚,低耦合: 类与类之间,功能与功能之间,模块与模块之间,功能尽量内聚,不同模块之间,尽 量独立

*造成了耦合性过高,牵一发动全身

注意:继承一定要慎用,主要利用继承简化代码的优点

继承的注意事项:

*1.单一继承性

* 2.支持多层继承

*3.如果父类成员使用private修饰,那么子类不能被继承

*4.如果一个子类继承了父类的属性和方法还可以有自己特有的属性和方法

*5.当子类和父类的成员变量重名的时候,子类优先

*6.构造方法不能够被继承

如何使用继承

*1.一般在写代码的时候发现代码中存在重复代码,需要向上抽取,考虑继承

*2.当某个类的设计非常复杂的时候可以考虑继承。例如: 设计一个窗口类

使用继承的步骤:

1、书写出所有子类,观察子类共有的成员变量和成员方法

2、抽象出共同点,书写一个父类

3、让子类去继承父类,并把子类的共有属性删除

访问权限修饰符

访问权限修饰符:

public [default] protected private

修饰类

1.public 任何包中的类都可以访问该类

2.默认(default) 同一个包中的类可以访问该类

3.不能用protected和private修饰类。

修饰成员(成员变量或者成员方法)

1.private 只对本身类可见

2.默认(default) 对同一包中的类可见

3.protected 对所有子类和同一包中的类可见

4.public对一切类可见

方法重写

方法重写概述

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写

方法重写的规则

1.发生在具有子父类的两个类中

2.方法名相同

3.参数列表相同

4.返回值类型相同或者是其子类

5.访问权限不能严于父类

6.抛出的异常不能够被扩大

访问权限修饰符的宽严关系

public > protected > default > private

方法重写的注意事项

1、父类中private修饰的方法不能被重写,也不能够被继承。

2、构造方法不能被重写。

3、子类重写父类方法时,访问权限不能更低。

4、重载和重写的比较(重写和重载是完全不同的两个概念毫无任何关系)

5、返回值类型相同或者是其子类

举例:

有农民(farmer),教师(teacher),科学家(scientist),服务生(attendant),其中农民,服务生只有基本工资,教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,请你写出相关类,将各种类型的员工的全年工资打印出来。

```java

public class OverrideDemo {

public static void main(String[] args) {

Farmer f = new Farmer(4500.0);

Teacher t = new Teacher(6000.0, 60);

Scientist s = new Scientist(8000.0, 100000.0);

Attendant a = new Attendant(2400.0);

f.printAllYearSalary();

t.printAllYearSalary();

s.printAllYearSalary();

a.printAllYearSalary();

}

}

class Employee {

protected double basicSalary;

public Employee() {

}

public Employee(double basicSalary) {

this.basicSalary = basicSalary;

}

public void printAllYearSalary() {

System.out.println("全年工资: " + (basicSalary * 12));

}

public double getBasicSalary() {

return basicSalary;

}

public void setBasicSalary(double basicSalary) {

this.basicSalary = basicSalary;

}

}

class Farmer extends Employee {

public Farmer() {

}

public Farmer(double basicSalary) {

super(basicSalary);

}

}

class Teacher extends Employee {

private double courseFee;

public Teacher() {

}

public Teacher(double basicSalary, double courseFee) {

super(basicSalary);

this.courseFee = courseFee;

}

public double getCourseFee() {

return courseFee;

}

public void setCourseFee(double courseFee) {

this.courseFee = courseFee;

}

@Override

public void printAllYearSalary() {

System.out.println("全年工资: " + (basicSalary * 12 + courseFee * 600));

}

}

class Scientist extends Employee {

private double yearBouns;

public Scientist() {

}

public Scientist(double basicSalary, double yearBouns) {

super(basicSalary);

this.yearBouns = yearBouns;

}

@Override

public void printAllYearSalary() {

System.out.println("全年工资: " + (basicSalary * 12 + yearBouns));

}

public double getYearBouns() {

return yearBouns;

}

public void setYearBouns(double yearBouns) {

this.yearBouns = yearBouns;

}

}

class Attendant extends Employee {

public Attendant() {

}

public Attendant(double baiscSalary) {

super(baiscSalary);

}

}

```

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 462评论 0 2
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 第四章 面向对象 面向对象思想 面向对象思想的引入前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码...
    chongsheng阅读 550评论 0 0
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,132评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,642评论 0 11