#Java学习总结面向对象+抽象+接口
1.类和对象
- 类
类是对现实生活中一类具有共同属性和行为的事务的抽象;类是对象的数据类型,类是具有相同属性和行为的一组对象的集合。简单理解:类就是对现实事务的一种描述。
类的组成:
属性:指事物的特征
行为:指事物能执行的操作
- 类和对象的关系
-
类:类是对现实生活中一类具有共同属性和行为的事物的抽象
对象:是能够看得到摸得着的真实存在的实体
简单理解:类是对事物的一种描述,对象则为具体存在的事物
类的定义
- 类的组成是由属性和行为两部分组成
-
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现
public class Phone {//成员变量String brand;int price;//成员方法public void call() {System.out.println("打电话");}public void sendMessage() {System.out.println("发短信");}
}
单个对象内存图
成员变量使用过程
成员方法调用过程
多个对象内存图成员变量使用过程
成员方法调用过程
多个对象指向相同内存图
- 总结
当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据
成员变量和局部变量
- 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
- 内存中位置不同:成员变量(堆内存)局部变量(栈内存)
- 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,随着方法的调用完毕而消失)
- 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)
面向对象的三大特征
封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念。
- 封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
成员变量private,提供对应的getXxx()/setXxx()方法 - 封装好处
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性
继承:继承是一种联结类的层次模型,并且允许和鼓励重用,它提供了一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。子类继承了原始类的特性,子类可以从它的父类那里继承方法和实例变量,并且可以修改或增加新的方法使之更适合特殊的要求。
继承的特点
子类自动拥有父类的非私有的成员
子类还可以有自己特有的成员
Java中只支持单继承,允许多层继承继承的好处和弊端
好处:
提高了代码的复用性
提供了代码的维护性
弊端:
类与类之间的耦合性增强了继承中成员方法的访问特点
问题:如果子类没有这个方法,使用的是父类的还是子类的?
子类没有找父类,父类没有就报错问题:继承中如果出现了重名的成员方法,调用的时候. 执行的是父类的还是子类的?
子类的 有一个重要的概念,方法的重写面试题:Overload和Override之间的区别
* A:Overload(重载): 同一个类中,方法名相同 参数列表不同 与返回值无关参数列表不同:* 个数不同* 与之对应的数据类型不同* B:Override(覆盖重写):必须是在继承/实现的关系,才有方法的重写方法的重写: 与父类中的方法的声明是一模一样的
final
1.什么是final
【修饰 类 方法 变量】 final 表示最终的一个意思
2.特点
final修饰的类: 表示最终的类 , 没有子类 这个类就是太监类,但是太监类也有是父亲的
final修饰的成员方法: 表示这个方法是最终的,不能被子类重写
final修饰的成员变量: 不在是变量,而是常量给常量赋值有两种方式:
* 直接赋值(推荐)
public final int AGE = 10;
* 构造方法赋值(了解)自定义常量的格式:
* 普通的常量
修饰符 final 数据类型 常量名 = 值;
* 静态的常量
修饰符 static final 数据类型 常量名 = 值;final修饰引用数据类型,修饰的是地址值,而不是里面的元素
final修饰基本数据类型,修饰的是值,这个值不能改变
static关键字
- static可以修饰什么
* 可以修饰成员变量
* 可以修饰成员方法 - static修饰的特点
* 被static所修饰的成员是共享数据,而不在是属于 某一个对象了! 这个数据属于类的
- static可以修饰什么
多态:多态是指允许不同类的对象对同一消息做出响应。多态包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
多态的前提?
继承/接口实现的关系
要有方法的重写
父类的引用指向了子类的对象多态的格式:
* 普通类的多态
父类 对象名= new 子类对象();
* 抽象类的多态
* 接口的多态
多态中成员变量和成员方法的使用特点
总结:
* 成员变量的使用特点
编译看左边 运行看左边
* 成员方法的使用特点
编译看左边 运行看右边
* 静态的成员:
编译看左边 运行看左边使用多态有什么好处和弊端
好处:提高了代码的扩展性
弊端:使用不了子类特有的成员
多态的转型
多态的向上转型(基本数据类型隐式转换)
将子类的对象提升为了父类的类型多态的向下转型(基本数据类型强制转换)
将父类的对象强转为子类的类型* 什么情况下需要用到向下转型?子类特有的行为的,前提有多态的向上转型* 向下转型的格式目标数据类型 对象名 = (目标数据类型)父类的变量名;
抽象类
- 什么是抽象类?
抽象方法所在的类必定是一个抽象类 - 什么是抽象方法?
在多个类中,方法的声明是一样的,但是具体的功能是不一样的
我们只抽取方法的声明,没有方法体的方法,就是抽象方法
抽象方法定义格式
public abstract 返回值 方法名(参数列表);
抽象类定义格式
public abstract class 类名{}
抽象类的成员特点
总结:* 成员变量* 成员变量 * 常量 * 构造方法* 可以有构造方法为了给子类进行初始化数据使用的 *成员方法* 可以有非抽象方法(提高了代码的复用性)* 有抽象方法
总结:
普通类中有什么,抽象类中就写什么,只不过比普通类多了一个关键字 abstract- 抽象的思想:
为了强制子类重写父类的抽象方法而来的
强制的思想
- 抽象的思想:
接口
什么是接口
总结:
接口就是一种公共规范标准
标准要对外暴露出来
接口就是对行为进行规范接口的基本定义格式
格式:
public interface 接口名{}使用接口的格式:public class 实现类 implements 接口{重写接口中所有的抽象方法}
注意事项:
一个类实现一个接口,必须要重写接口中所有的抽方法
要么这个类是一个抽象类
案例代码:public class Test {public static void main(String[] args) {// 多态的形式创建对象Inter i = new InterImpl();i.method();InterImpl impl = new InterImpl();impl.method();}}public interface Inter {public abstract void method();}public class InterImpl implements Inter {@Overridepublic void method() {System.out.println("接口中的method方法");}}
接口的成员特点
成员变量
常量,在接口中定义的变量就是一个常量,默认有public static final 来修饰的
写不写都有这三个修饰符.而且还可以选择性的去写构造方法
没有构造方法的成员方法
全都是抽象方法,默认有 public abstract 修饰.
写不写都有这两个修饰符.而且还可以选择性的去写
类和接口的关系
类与类的关系
继承的关系 单继承 但是多层继承类与接口的关系
实现的关系 多实现接口与接口的关系
继承的关系 多继承类与抽象类的关系
继承的关系 单继承 但是多层继承抽象类与抽类的关系
继承的关系 单继承 但是多层继承抽象类与接口的关系
实现的关系
抽象类和接口的区别
总结:
成员区别
抽象类
可以有成员变量 还可以有常量
成员方法(抽象的和非抽象的)接口
常量
抽象方法
关系区别
类与类
继承的关系 单继承 但是多层继承类与接口
实现的关系 多实现接口与接口
继承的关系 多继承
设计理念区别
- 抽象类
对类抽象,包括属性、行为 - 接口
对行为抽象,主要是行为
- 抽象类
#Java学习总结面向对象+抽象+接口相关推荐
- day8 Java学习(面向对象.多态接口)
面向对象 多态: 概述:事物存在的多种形态. 多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问: 编译看左边(父类),运行左边(父类) ...
- Java学习笔记_抽象/接口
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类.在class前面写上abstract 如何使用抽象类和抽象方法 不能直接创建new抽象类 ...
- java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...
做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口 public void eat(Food food); // ...
- 深圳Java学习:面向对象【重点知识】
深圳Java学习:面向对象[重点知识] 在Java的学习中,面向对象应该是Java技术的重中之重,虽然在生活中没有对象可以面对,但在技术中还是要一直接触面对对象,而且不可避免.今天千锋小编对面向对象来 ...
- JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用
本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...
- Java 学习(12)--接口
一.接口 (1)猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的, 这种额外的功能, java 提供了接口表示. (2)接口的特点: A:接口用关键字 interface 修饰 ...
- Java学习笔记——面向对象
声明:文章首发于我的个人微信公众号Java编程社区,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人类是 ...
- Java学习笔记——面向对象 1
声明:本文首发于我的个人微信公众号[Java编程社区],查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人 ...
- java学习之面向对象和封装
面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情. 面向过程强调步骤 ...
最新文章
- 基于相关系数的影像匹配_智库丨陈晓勇:低空摄影测量立体影像匹配的现状与展望...
- vonic 安装的坑
- Linux下安装Oracle遇到的错误
- MD5单向,加密算法-java
- 依赖注入_set方法注入_构造器注入
- 成功驱动5150用HT68F30
- neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...
- Python学习笔记——输入与输出用法
- 获取登录域帐号信息方式之 —-IIS(VB)
- 实现一个shared_ptr
- PDF加密以及去除密码小妙招
- Windows系统优化软件 | 这10款功能超级强大!界面优美!值得收藏
- py的征途2之简例分享
- 编程猫平台 python-编程猫发布高中新课标产品 助力中小学python教育
- 对CS1.6游戏的分析及心得
- 计算机word铁路试题,计算机word试题含答案
- ToxinPred – 多肽毒性预测、突变设计和理化性质预测
- js高级程序设计(一) —— js简介
- mysql报错3009_MySQL修改密码方法汇总
- 想要摆脱CURD,写作是一个出路?(文末送5本书籍)