面向对象

一.三大特征:

1.封装: 把数据封装起来,不让外面随便访问

2,继承: 子类继承父类,有共同点

3.多态: 事物存在的多种形态

public 公共的,所有类都可以访问;

private 私有的,只有本类可以访问

protected 同一包,当前类,子孙类可以访问

default 同一个包内,本类可以访问

不同包调用,要导包

private 私有属性,要set,get方法

this.  当前的实例

3.final

final 加到变量上,就成为常量;不能修改

final 加到方法前,这个方法不能被子类覆盖(不能重写)

final 加到类前,表示这个类不能被继承

二. 继承

1.* A:this和super都代表什么

* this:代表当前对象的引用,谁来调用我,我就代表谁

* super:代表当前对象父类的引用

* B:this和super的使用区别

* a:调用成员变量

*this.成员变量 调用本类的成员变量,本类没有也可以调用父类的成员变量

* super.成员变量 调用父类的成员变量

* b:调用构造方法

* this(...) 调用本类的构造方法

* super(...) 调用父类的构造方法

* c:调用成员方法

* this.成员方法 调用本类的成员方法,也可以调用父类的方法

* super.成员方法 调用父类的成员方法

2.重载和重写的区别

* A:方法重写注意事项

* a:父类中私有方法不能被重写

* 因为父类私有方法子类根本就无法继承,既然子类无法继承,就谈不上重写了

* b:子类重写父类方法时,访问权限不能更低

* 最好就一致

* c:父类静态方法,子类也必须通过静态方法进行重写

* 子类重写父类方法的时候,最好声明一模一样。

* Override和Overload的区别?Overload能改变返回值类型吗?

* overload可以改变返回值类型,只看参数列表

* 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的

* 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

* 子类对象调用方法的时候:

* 先找子类本身,再找父类。

2.静态优先于非静态,父类优先于子类,构造代码块优先于构造方法

三.多态

* A:多态(polymorphic[,pɒlɪ'mɔːfɪk])概述

* 事物存在的多种形态

* B:多态前提

* a:要有继承关系。

* b:要有方法重写。

* c:要有父类引用指向子类对象。father f = new son();    ///////向上转型

1.多态中的成员访问特点之成员变量

成员变量

编译看左边(父类),运行看左边(父类)

成员方法

编译看左边(父类),运行看右边(子类)。///////////////动态绑定

静态方法

编译看左边(父类),运行看左边(父类)。

(静态和类相关,算不上重写,所以,访问还是左边的)

只有非静态的成员方法,编译看左边,运行看右边

2.instanceof    判断前面这个对象是否属于后面这个类

```

if (animal instanceof Dog) {

System.out.println("这是一条狗");

Dog d = (Dog)animal;

d.bite();

}else if (animal instanceof Cat) {

System.out.println("这是一只猫");

Cat c = (Cat)animal;

c.bite();

}

```

3.static关键字

(1)被static关键字修饰的成员,属于该类中所有对象的共享内容可以直接用类名调用,也可以用对象调用,但是建议用类名调用

(2)随着类的加载而加载,优先于对象存在:随着字节码文件的加载而加载的,那时候还没有对象呢

(3)静态修饰的内容一般我们称其为:与类相关的,类成员(静态变量:类变量,静态方法:类方法)

(4)在静态方法中是没有this关键字的(因为this指的是一个具体的对象,而静态在加载到内存时还没有具体的对象)

(5)静态方法只能访问静态的成员变量和静态的成员方法,非静态的成员方法既可以方法静态的成员方法和成员变量,又能访问非静态的成员方法和成员变量

简单记忆:静态不能访问非静态

4.组合是 has a 的关系,继承是is a的关系(我有一条狗,,,,,,,,,狗继承动物)

优先使用组合,因为他灵活

继承尽量不要超过三层

5.abstract 关键字

* A:抽象类概述

* 抽象就是看不懂的 ,不能被实例化

* B:抽象类特点

* a:抽象类和抽象方法必须用abstract关键字修饰

* abstract class 类名 {}

* public abstract void eat();//当不知道该方法具体是怎么实现的

//比如动物吃,你知道它吃什么吗?怎么吃?都不知道

* b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

* c:抽象类不能实例化那么,抽象类如何实例化呢?

* 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

* d:抽象类的子类

* 要么是抽象类

* 要么重写抽象类中的所有抽象方法

* A:抽象类的成员特点

* a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量

* b:构造方法:有。

* 用于子类访问父类数据的初始化。

* c:成员方法:既可以是抽象的,也可以是非抽象的。

* B:抽象类的成员方法特性:

*a:抽象方法 强制要求子类做的事情。/////子类必须实现

publicabstractvoidmethod();//  抽象方法只要定义就行,不要具体的实现

* b:非抽象方法 子类继承的事情,提高代码复用性。////子类可以直接使用

接口的方法都是抽象的

1.接口

接口特点

* a:接口用关键字interface表示

* interface 接口名 {}

* b:类实现接口用implements表示

* class 类名 implements 接口名 {}

* c:接口不能实例化

* 那么,接口如何实例化呢?

* 按照多态的方式来实例化。

* d:接口的子类

* a:可以是抽象类。但是意义不大。

* b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

接口与类相似点:

一个接口可以有多个方法。

接口文件保存在.java结尾的文件中,文件名使用接口名。

接口的字节码文件保存在.class结尾的文件中。

接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的区别:

接口不能用于实例化对象。

接口没有构造方法。

接口中所有的方法必须是抽象方法。

接口不能包含成员变量,除了static和final变量。

接口不是被类继承了,而是要被类实现。

接口支持多重继承。

*A:接口成员特点

*成员变量只能是常量,并且是静态的并公共的。

* 默认修饰符:public static final

* 建议:自己手动给出。

* 构造方法:接口没有构造方法。

* 成员方法:只能是抽象方法。//////接口的方法都是抽象的

* 默认修饰符:public abstract

* 建议:自己手动给出。

3.defualt关键字

```

default void report() { //加defalut 可以声明方法

System.out.println("汇报相关数据");

}

```

2.内部类

内部类访问特点

* a:内部类可以直接访问外部类的成员,包括私有。

* b:外部类要访问内部类的成员,必须创建对象。

* 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

out.int oi - new out().new int();

oi.方法();

3.静态成员内部类

* static

* B:成员内部类被静态修饰后的访问方式是:

* 外部类名.内部类名 对象名 = 外部类名.内部类对象;

Outer.Inneroi=newOuter.Inner();

//外部类是一个普通类,但是内部类是一个静态类,那么一个普通类访问静态成员时可以用类名.的方式,

4.(成员内部类私有使用)

* private:在外部不能直接创建内部类对象了

5.局部内部类:(外部类里面方法里的类)

3.匿名内部类;

* A:匿名内部类

* 就是内部类的简化写法。

* B:前提:存在一个类或者接口

* 这里的类可以是具体类也可以是抽象类。

* C:格式:

*

new 类名或者接口名(){

重写方法;

}

* D:本质是什么呢?------------局部内部类

*是一个继承了该类或者实现了该接口的子类匿名对象。

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

推荐阅读更多精彩内容

  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,154评论 0 2
  • 1.面向对象思想的特点 (1)是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做) (2)可...
    梦游的沙师弟阅读 409评论 0 0
  • 什么是对象 1.对象的概念:对特定一个存在事物2.什么是面向对象:以自我为中心对待一个特定事物存在,需要自己描述出...
    joshul阅读 709评论 0 1
  • Java基础笔记(一) 面向对象 [TOC] 1、定义类 其中的修饰符可以是public、final、abstra...
    小小少年Boy阅读 366评论 0 1
  • 以下是《疯狂Java讲义》中的一些知识,如有错误,烦请指正。 Java8增强的包装类 自动装箱就是把一个基本类型的...
    hainingwyx阅读 396评论 0 0