【Java学习笔记之十三】初探Java面向对象的过程及代码实现
理解Java面向对象的重要知识点:
一、 类,对象
类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的、红色的、白色的... 这里,汽车设计图就是我们说的类(class),生产车间就是new构造器(大部分对象都是new出来的),生产出来的汽车就是我们要说的对象。可以说java编程实质就是构建类的过程。
对象?万物皆对象,宇宙中,如植物,动物,人类,每个个体都是各司其职、各尽所能的。这就要求对象高内聚、低耦合(简单理解就是人的大脑,它负责思考,想象,记忆,而不能呼吸,排毒,消化食物,从而保证它独立和高效)。对象具有两种东西状态(属性)和行为(方法),请看下面代码:
Student.java
public class Student {
String name; //姓名
int age; //年龄
String classNo; //班级
String hobby; //爱好
//输出信息方法
public void show(){
System.out.println(name + "\n年龄:" + age + "\n就读于:" +
classNo + "\n爱好:" + hobby);
}
}
InitialStudent.java
public class InitialStudent {
public static void main(String args[]){
Student student = new Student(); //建立对象
student.name = "张浩"; //给对象赋值
student.age = 10;
student.classNo = "S1班";
student.hobby = "篮球";
student.show(); //调用方法
} }
二、封装,继承,多态
封装?举个粗俗的比喻,我的移动硬盘存了很多各式各类的资料,但是舍友常常借用,时不时拿我的用(格式化?装系统?存电影?),这就给我这个拥有者非常大的不便,我就跟他声明,这个硬盘是我私有的,不能你得按照我允许的方式使用!对象也是这样,不能随意的存取内部数据,否则会造成“交叉感染”。所以我们需要封装:将属性私有化,提供公有的方法访问私有属性。
Adult.java
public class Adult {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 18) {
System.out.println("错误!最小年龄应为18岁!");
this.age = 18; // 如果不符合年龄要求,则赋予默认值
}
else{
this.age = age;
}
} public String toString() {
return " [age=" + age + "]";
}
}
TestAdult.java
public class TestAdult {
public static void main(String[] args) {
Adult p1 = new Adult();
p1.setAge(20); //通过seter、geter、toString来对Adult类的私有属性访问
System.out.println(p1.toString()); //增加了数据访问限制,保证可维护性
}
}
继承?经理觉得小李设计的汽车设计图非常棒,但是现在推崇新能源,于是需要将引擎改成电能发动机。于是小陈轻而易举的将图纸中汽油发动机部分改成引擎发动机,再重制一下关系就完成了新图纸!这就是继承的作用:是使用已存在的类的定义作为基础建立新类,新的类可以拥有父类的特点,也可以衍生出更多的特点。这使得复用以前的代码非常容易,能够大大缩短开发时间。
Person.java
class Person { // 定义人类
public String mName; // 姓名
public int mAge; // 年龄 public void dining() {
System.out.println("吃饱了...");
} // 吃饭的方法
} class Student extends Person { // 学生类继承于人类
public float mGrade; // 成绩 public void examination() {
System.out.println("考试及格了...");
} // 考试的方法
} class Teacher extends Person { // 教师类继承于人类
public float mSalary; // 薪水 public void prelection() {
System.out.println("上课很累...");
} // 上课的方法
}
TestPerson.java
public class TestPerson {
public static void main(String[] args) {
Student std = new Student(); // 实例化学生对象
std.mName = "李东";
std.mAge = 18; // 为姓名和年龄赋值,访问的是父类中的成员
std.dining(); // 调用吃饭的方法,访问的是父类中的成员
std.examination(); // 调用考试方法,访问的是子类中的成员 Teacher teacher = new Teacher(); // 实例化教师对象
teacher.mName = "赵忠祥";
teacher.mAge = 72;// 为姓名和年龄赋值,访问的是父类中的成员
teacher.dining();// 调用吃饭的方法,访问的是父类中的成员
teacher.prelection();// 调用考试方法,访问的是子类中的成员
}
}
多态?程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。小李喜欢听小鸟唱歌{麻雀,杜鹃,鹦鹉}
小李:窗外的鸟儿,给我唱首歌。
1.(鸟 bird = new 麻雀 )?
2.(鸟 bird = new 杜鹃 )?
3.(鸟 bird = new 鹦鹉 )?
鸟儿:bird.sing()~~~~~
小李:鸟儿唱的不错,你是哪种鸟?
鸟儿: bird.shape()
小李:(---如果上面蓝字定义的是3,是鹦鹉)哈哈!原来你是鹦鹉!
所以,多态的过程实质是一个抽象指令,让一组具有相同行为单具有不同内容的个体协同工作的这样的一个过程。
【Java学习笔记之十三】初探Java面向对象的过程及代码实现的更多相关文章
- java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序
java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...
- Java学习笔记(二)——Java操作properties文件
[前面的话] 前段时间在学习和玩java web相关的东西,对于这些技术,一边学习,一边做东西,一边总结,希望可以一边成长和有所收获.有时总是思考太多反而成为了前进的阻力,所以对于生活还是简单一些,不 ...
- Java学习笔记(一) java介绍
编程语言分为:编译型语言和解释型语言. 编译型语言需要经过特定编译器通过一次性编译,成为该特定平台硬件可执行的机器码,可脱离开发环境独立运行,运行效率较高,但是无法跨平台移植. 解释型语言需要经过特定 ...
- Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码
说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...
- Java学习笔记二十八:Java中的接口
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
- Java学习笔记(六):面向对象、接口和抽象类
类和对象 Java是一门面向对象的语言,下面我们来了解一下Java中的面向对象. 方法和重载 Java中的方法格式如下: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } Java的方法支持重载 ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- Java学习笔记二十三:Java的继承初始化顺序
Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...
随机推荐
- SSH框架完全整合
大三学期渐末,事情也挺多的,上周就开始着手整合SSH框架,到现在才真正的完成,过程中碰到了许多小问题(小问题大折腾,哭脸.jpg).本着善始善终的原则,最终把它给完成了. 本篇文章就在: win7 6 ...
- 最长回文子序列(LPS)
问题描述: 回文是正序与逆序相同的非空字符串,例如"civic"."racecar"都是回文串.任意单个字符的回文是其本身. 求最长回文子序列要求在给定的字符串 ...
- Dos与Linux的断行字符
Symptom Dos和Linux下面的断行字符是不一样的,至于哪里不一样的呢,先举个例子看一看 Cause 我们也可以使用cat -A filename分别查看Dos和Linux下创建的文件,会发现 ...
- iOS学习——iOS常用的存储方式
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.根据要存储的的数据的大小.存储性质以及存储类型,在iOS和An ...
- 我是如何确认线上CLOSE_WAIT产生的原因及如何解决的。
1.阐述 内部架构:Tomcat应用程序---> nginx ---> 其他Tomcat应用程序,内部Tomcat应用通过nginx调用其他应用. HTTP插件:HttpClient 4. ...
- 初识QT
前言:这是写给纯小白看的文章,大神可以自行绕道. QT的优势(摘自360百科): Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, ...
- JavaScript调试技巧
熟悉工具可以让工具在工作中发挥出更大的作用.尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug. 文中已经列出了14个你可能不知道的调试技巧,但是 ...
- Keep Mind Working
想找一个这样的地方,可以让脑袋持续运转着.不会像游戏一样让人着迷,不会像有色电视一样让人想错地方,也不会像工作一样充满太多严密.就是让脑袋继续转着,适意地思考些什么. 之前会跑去游戏里,至少没有太污. ...
- SQL基础学习_02_查询
SELECT语句 1. SELECT语句查询列(字段): SELECT <列名> FROM <表名>; 该语句使用了两个SQL子句,SELECT子句列举了 ...
- Head First设计模式之工厂模式
一.定义 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类 二.结构 1.抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的 ...