Java基础——面向对象编程(二)

8.final可以修饰类、方法、变量

特点:

final可以修饰类,该类就无法被继承

final可以修饰方法,该方法就不能被重写(覆盖)

final可以修饰变量,该变量就变成了常量。

常量:

a.字面值常量

"龙爸爸" 10 true

b.自定义常量

final int x = 10;

9.final修饰局部变量的问题:

基本数据类型:基本数据类型的值不能改变

引用数据类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的

10.final修饰变量的初始化时机:

a.被final修饰的变量只能赋值一次

b.在构造方法完毕前(非静态)

c.构造方法不能被final修饰

11.我们在学习面向对象的继承思想的时候,说过,继承一种体现"is A"的关系,也就是子类是父类的一种特殊的情况

狗是一种动物。猫也是一种动物。一条狗或者一只猫也是动物的这种类型

class Animal{

public void eat(){

System.out.println("吃一般的食物");

}

}

class Dog extends Animal{

public void eat(){

System.out.println("喝啤酒,吃炸鸡。");

}

}

class Cat extends Animal{

public void eat(){

System.out.println("吃鱼摆摆..");

}

}

创建了一个狗的对象,此时将子类对象赋值给父类对象

Animal a = new Dog();

a = new Cat();

对象a应该是一个多态,有两种类型

编译多态:把a的对象当做什么什么类型:Animal

运行多态:对象a的真正类型

多态:同一个对象(事务),在不同时刻体现出来的不同状态

举例:

酒--剑南春-XO-二锅头-白兰地

多态的前提:

a.必须存在继承的关系

b.要有方法的重写

其实你也是可以不重写方法,但是这样就没有任何意义

动物 d = new 猫();

d.eat();

动物 d = new 狗();

d.eat();

c.要有父类的引用指向子类的对象

父 f = new 子();

多态中的成员访问的特点:

a.成员变量

编译看左边,运行看左边

b.构造方法

创建子类对象的时候,访问父类的构造方法,对父类数据进行初始化

c.成员方法

编译看左边,运行看右边

d.静态方法

编译看左边,运行看左边

(静态和类相关的,其实算不上重写,访问的都是左边)

由于成员方法存在方法的重写,所以他的运行是看的你右边

12.多态的好处:

从我们之前举的例子,可以得知多态的一部分的作用。当不同的子类对象都当成父类类型来看,可以屏蔽不同子类对象之间的差异,从而

可以实现写出通用代码的编程,以适应不同的需求。

a.提高了代码的维护性(继承)

b.提高了代码的扩展性(多态)

13.多态的弊端:

不能够使用子类的特有功能

14.多态的弊端:

不能直接使用子类的特有的功能

我就想使用,你有么有办法?

怎么用呢?

a.创建子类对象的方法即可(跟我们的多态没毛线关系)、

b.把父类的引用强制的转换为子类的引用(向下转型(造型))

对象间的转型的问题:

向上转型:

Fu f = new Zi();

把子类对象赋值给父类引用(系统默认转换)

向下转型:

Zi z = (Zi)f//要求f必须是能够转为Zi的

15.ClassCastException:类型转换异常

一般都是在多态向下转型中引起的异常

1.抽象类的概述:

动物不应该是一个具体的东西,而且动物中有吃、睡、玩呀等等也不应该是具体的

我们应该把一个不是具体的功能称为抽象功能,而一个类中如果有抽象的功能,那么该类就应该是一个抽象类。

抽象类的特点:

a.抽象类和抽象方法必须用abstract关键字来进行修饰

b.抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类

c.抽象类不能实例化

因为不是具体的存在

抽象类中是有构造方法,但是也不能实例化,那么构造方法有啥作用?

就用于子类访问父类的数据

d.抽象类的子类

a.如果不想重写抽象方法,该子类也是一个抽象类

b.如果说你重写了父类的所有的抽象方法,那么该子类就是一个具体的类

c.抽象的子类必须重写父类的抽象方法

抽象类的实例化其实是靠具体的子类来实现的,也就是多态的方式

Animal a = new Dog();

抽象类的成员的特点:

成员变量:既可以是变量也可以是常量

成员方法:可以是抽象,也可是非抽象的

构造方法:有

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

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

a.抽象方法:可以强制要求具体化的子类必须要做的什么事情

b.非抽象方法:可以用于子类继承,提高代码的复用性

如果说一个类没有抽象方法,可不可以定义为抽象类?如果可以 意义何在?

A.可以

B.不可以创建对象,实现多态

abstract不能和哪些关键字共存?

private 冲突

final 冲突

static 冲突

2.猫狗案例

具体事物:猫,狗

共性:姓名,年龄,吃饭

分析:

从具体到抽象

猫:

成员变量:姓名,年龄

成员方法:吃饭(猫吃鱼)

构造方法:无参构造,带参构造

狗:

成员变量:姓名,年龄

成员方法:吃饭(狗吃班长)

构造方法:无参构造,带参构造

因为存在共性。所以我们需要提取出一个父类。动物类、

但是有由于吃饭的行为不一致,所以吃饭应该是一个抽象的

因为父类存在抽象的方法,所以父类就必须是一个抽象类

抽象的动物类:

成员变量:姓名,年龄

成员方法:吃饭(猫吃鱼)

构造方法:吃法()

3.单例设计模式:

在某一个类中,且有一个实例(对象),一般在开发中,工具类都应该是单例的设计模式

好处:

被单例设计的类只能创建一次对象,避免了对象的重复创建和销毁

节省内存空间

单例设计模式的设计方法有N种,老师这种写法叫做饿汉式写法()

单例的设计模式是最简单的设计模式,面试必问

单例设计也是最常用的设计的模式,知道我们后面学到Spring。其实本质上也是采用单例(超级对象工厂)

*/

public class SingletonDemo {

//让对象无法创建

private SingletonDemo() {}

//保持对象能够创建一次

private static final SingletonDemo instance = new SingletonDemo();

//提供公共返回返回

public static SingletonDemo getiInstance() {

return instance;

}

public void show() {

System.out.println("hello world");

}

}

class Dmeo{

public static void main(String[] args) {

SingletonDemo.getiInstance().show();

}

}

4. 接口的特点:

a.接口用interface来进行表示

interface 接口名{}

b.类实现接口使用implements 接口名

class 类名 implements 接口名{}

c.接口不能实例化

那么,接口如何实例化?

按照多态的方式就OK了

d.接口的子类

a.可以是抽象类,但是没必要

b.可以是具体类,但是要重新接口所有抽象方法(一般都是这么用)

由此可见:

a.具体类的多态(几乎没有)

b.抽象类多态(常用)

c.接口多态(用的炒鸡多)

5.接口成员变量的特点:

成员变量:只能是常量。并且是静态

默认的修饰:public static final

建议自己手动给出,因为你太闲了

构造方法:

接口不是类,所以没有构造方法

成员方法:只能是抽象方法

默认的修饰:public abstract

建议自己手动给出,因为你太闲了

7. 类与类:

继承关系,只能单根继承 但是可以多层继承

类与接口:

实现关系,可以单实现,也可以多实现

接口与接口:

继承关系,可以单继承也可以多继承

接口和抽象类的区别:

相同点:

a.都不能实例化

b.都可以定义抽象方法,其子类也必须实现(重新)该抽象方法

c.都位于继承层次的顶端,用于被继承或者实现

成员:

抽象类:

成员变量:可以是变量也可以是常量

成员方法:可以是抽象,也可以是非抽象

构造方法:有

接口:

成员变量:没有变量,只有常量

成员方法:只能是抽象方法

构造方法:没有

设计理念的区别:

抽象类其实是一个继承的体系:"is a"的关系。抽象类中的定义是该继承体系的共同特性

接口 被实现的其实是:"like a"的关系。接口中定义的其实是该继承体系的扩展功能(其实定义的也是一种规范)

二者的选用:

优先选用的是接口。尽量少用抽象(因为的抽象继承关系存在耦合度过高的问题,也违背了单一原则)。若需要定义子类的功能,又要为子类提供共性的功能的时候

就选用抽象,在选用抽象的时候,尽量判别你的业务是不是一个抽象的存在。

9.形参和返回值的深入讲解

引用类型:

类:要的其实是该类的具体的对象

接口:要的其实是该接口的实现类的对象

抽象类:其实要的是该抽象的子类的对象

返回值:

类:要的其实是该类的具体的对象

接口:要的其实是该接口的实现类的对象

抽象类:其实要的是该抽象的子类的对象

1. 字符串:就是由多个字符组成遗传字符,其实也可以看成一个字符串数组

通过查看API,我们可以知道

a.字符串字面值"abc"也可以看成是一个字符串对象

b.字符串是常量,一旦赋值,就不能发生改变

Java。大家都知道,我们是学Java全栈的,大家就肯定以为我有全套的Java系统教程。没错,我是有Java全套系统教程,进扣裙【47】974【9726】所示,今天小编就免费送!~

“我们相信人人都可以成为一个程序员,现在开始,找个师兄,带你入门,学习的路上不再迷茫。这里是ja+va修真院,初学者转行到互联网行业的聚集地。"

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

推荐阅读更多精彩内容

  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 428评论 0 2
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,734评论 0 10
  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 630评论 0 1
  • 二、面向对象 1、面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的...
    佘大将军阅读 402评论 0 1
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,519评论 0 6