Java面向对象核心技能
1、封装
封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处:隐藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作。
封装的步骤:修改属性的可见性来限制对属性的访问;为每个属性创建一对赋值方法和取值方法,在赋值方法中加入对属性的存取控制语句。
封装使用到的权限控制符:private(私有的)、public(公开的)、protected(对子类和同包的类开放的)
延伸:static修饰符
static可以用来修饰属性、方法、代码块。static修饰的变量是属于这个类所有的,不属于某一个对象。所以由这个类创建出来的所有对象共同享用一个static变量。
被static修饰的属性和方法通常被称之为类属性和类方法。不被static修饰的则成为实例属性和实例方法。
static块:static块只在类被创建时加载一次,直到程序结束。通常用于初始化在程序中从程序开始到程序结束只赋一次值的属性。
语法:static {//代码块}
2、继承
继承是面向对象的三大特性之一,是Java中实现代码重用的重要手段之一。Java中只支持单继承,即每个类只能有一个直接父类。
在Java中,所有的Java类都直接或间接的继承了Object类。Object类是所有Java类的祖先。在定义一个类时,如果没有使用extends关键字,那么这个类直接继承Object类。
在Java中,子类可以从父类中继承到以下“财产”:
1.继承public和protected修饰的属性和方法,无论子类和父类是否在同一个包里。
2.继承默认权限修饰符(friendly)修饰的属性和方法,但子类和父类必须在同一个包里。
3.无法继承父类的构造方法。
4.无法继承private修饰的属性和方法。
另外,在子类中可以根据需求对从父类中继承的方法进行重写(或称覆盖)。在进行重写的时候需要注意以下几点:
1.重写方法和被重写方法必须具有相同的方法名。
2.重写方法和被重写方法必须具有相同的参数列表。
3.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类。
4.重写方法不能缩小被重写方法的访问权限。
super关键字:
在使用继承来编程的过程中常常会用到“super”关键字。
super代表对当前对象的直接父类对象的默认引用。在子类中可以通过super关键字来访问父类中的成员。
在使用super关键字访问父类成员时,需要注意以下几点:
1.super关键字必须出现在子类(子类的方法和构造方法)中,而不是其他位置。
2.可以访问父类的成员,如父类的属性、方法、构造方法。
3.使用时需注意父类中权限的限制,不能使用super访问父类中private修饰的成员。
例:
super.name; //访问直接父类的name属性
super.test(); //访问直接父类的test方法
super(name); //访问直接父类的对应构造方法,只能出现在构造方法中
关于继承中构造方法需要注意的事项:
1.如果子类中没有显示的调用父类的构造方法,系统会优先调用父类中的无参构造方法。
2.在程序运行时,总是会先调用父类的构造方法。
延伸:重载:
重载是同一个类中的方法有不同的实现,只要求方法名和参数列表不同,和返回值类型、访问修饰符无关。
3、抽象类和抽象方法
C#中的抽象类和抽象方法基本和Java中的一样,之前已总结C#中的抽象类和抽象方法,故此次只做简单总结&回顾。
在Java中抽象类和抽象方法的特点如下:
1.抽象类和抽象方法都通过abstract关键字来修饰。
2.抽象类不能实例化。抽象类中可以没有、有一个或多个抽象方法,也可以全部都是抽象方法。
3.抽象方法只有声明,没有方法实现。由抽象方法的类必须是抽象类。子类必须重写所有的抽象方法,除非子类还是一个抽象类。
延伸:final关键字:
final可以用来修饰类、方法和属性,不能修饰构造方法。
final修饰的类被称为“最终类”,不能被继承。
final修饰的方法不能被重写。
final修饰的属性会变成常量,除初始化时不能在其他地方被修改。
4、多态
C#中的多态和Java中的基本相同,因之前做过C#的多态总结,故此次只做简单总结。
多态即同一个实现接口,使用不同的实例而执行不同的操作。
子类转换成父类时需注意的规则:
1.将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。
2.通过父类引用变量调用的方法是子类覆盖或继承的父类的方法,不是父类的方法。
3.通过父类引用变量无法调用子类特有的方法。
父类转换成子类时需注意的规则:
1.父类转换成子类称为向下转型,需要进行强制转换。
2.在强制转换时为了避免一场,可以通过instanceof关键字。
instanceof关键字:
instanceof关键字用来判断一个对象是否属于一个类或者实现了一个借口,结果为true或false。和C#中的is关键字作用相同。
5、接口
接口和抽象类大致相同,抽象类注重的是代码的复用,而接口注重的是代码的扩展和维护。接口是一种规范和标准,可以约束类的行为。
通过面向接口编程可以降低代码间的耦合性,提高代码的可扩展性和可维护性。
在开发系统时,主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统。
接口的定义:
1.接口的命名规则和类相同。
例: public interface 接口名 {
}
2.接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰。接口中的常量必须在定义时指定初始值。
3.接口中所有关的方法都是抽象方法。接口中方法都会自动用public abstract修饰。
4.接口不能被实例化,接口中不能有构造方法。
5.接口之间通过extends实现继承关系。一个接口可以继承多个接口,但接口不能继承类。
6.接口的实现类必须实现接口中的全部方法,否则必须定义为抽象类。
一个类只能有一个直接父类,但可以通过implements实现多个接口。但如果在继承父类的同时又实现了接口的时候,extends关键字必须在implements关键字之前。
C#中接口的使用和Java中的大致相同,只是在实现的时候使用冒号“:”而不是implements。
Java面向对象核心技能的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- java面向对象的核心思想
java面向对象的特征之一:封装 1.封装性的使用 package edu.tongji.classdemo; /* 封装性 1.封装的目的:保护某些属性和方法不被外部所见 2.封装的实现 为属性和方 ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
- Java软件工程师技能图谱
原文链接:Java软件工程师技能图谱 最近在考虑"拥有怎样的技能才能算一名合格的java软件工程师呢?"这个问题.碰巧在github发现一个很棒的开源项目--程序员技能图谱.@Zh ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
随机推荐
- js加载XML文件
// XML文件 <?xml version="1.0" encoding="gb2312"?> <root> <father n ...
- 如何在 Windows上编译Objective-C
Objective-C现在几乎已经变成了苹果的专利了,可以直接在苹果的Xcode上编译Objective-C程序,但是在Windows平台下的编译工具就寥寥无几了,本身这种语言用的人就不是很多.今天在 ...
- 最近发现的.net core中的一些bugs
1.使用.net core的过程中发现TypeInfo.GetCustomAttributes()只能写在主线程中,否则如果该自定义特性存在于nuget中就会报错,貌似nuget中的dll仅在主线程使 ...
- Material Design学习-----TextInputLayout
TextInputLayout是为EditText提供了一种新的实现和交互方式.在传统的EditText中存在一个hint属性,是说在editext中没有内容时,默认的提示信息.当想edittext中 ...
- Material Design学习-----SnackBar
SnackBar是一个和Toast类似的空间,用于弹出提示作用,但是相比于Toast而已,SnackBar会有一个不错的动画效果,同时当手指完成屏幕中其他操作的时候,SnackBar会立即消失.同时可 ...
- 翻译:如何使用CSS实现多行文本的省略号显示
本文翻译自CSS Ellipsis: How to Manage Multi-Line Ellipsis in Pure CSS,文中某些部分有些许改动,并添加译者的一些感想,请各位读者谅解. 合理的 ...
- Java 数值类型以及计算
前段时候写了一个对外提供的接口,其中有一个数值校验的计算.在测试的过程中发现5.6-1.6 != 4,在反复的测试过程中发现double类型的数值为有精度丢失的现象,看来还是基础知识不牢固,所以就在网 ...
- Robots协议
Robots协议 什么是robots? Robots文件:网站和搜索引擎之间的一个协议. 用来防止搜索引擎抓取那些我们不想被搜索引擎看到的隐私内容. Robots文件告诉蜘蛛什么是可以被查看的. ...
- 【NFS项目实战二】NFS共享数据的时时同步推送备份
[NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...
- ASP.NET脚本过滤-防止跨站脚本攻击(收集别人的)
ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRe ...