一、面向对象编程的概念

1-1  介绍类与对象

类与对象的定义
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。 [1]

类与对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
类型的声明

先声明类类型,然后再定义对象

类的定义对象

类其实就是一个模板,比如说类就好比一张房子的设计图纸,或者说是一个倒印模具,创建一个类就好比设计一张图纸,刻一个模板。对象就好比一座建好的房子,一个成型的模型,无疑想要一座房子或者一个模型都先需要一张图纸和一个模板,而这就是类和对象的关系。

1-2  创建类与对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型。

实例化:使用关键字 new 来创建一个对象。

初始化:使用 new 创建对象时,会调用构造方法初始化对象。

对象由类的构造方法,实例化而来
例如:有一个类Student,那么对象的实例过程:

public class Student{String name;public static void main(String [] args){Student stu = new Student();//此处即创建了一个对象}
}

1-3  成员变量

成员变量是指类的一些属性定义,标志类的静态特征,它的基本格式如下:

【访问修饰符】【修饰符】【类型】【属性名称】= 【初始值】

访问修饰符:public(公共的);protected(受保护的);无修饰符和private(私有的)。

修饰符:对属性特征的描述:如static,final 等等。

类型:属性的数据类型,可以是任意类型。

属性名称:任何合法标识符。

初始值:赋值给属性的初始值。

举例:

public static int index = 0;

很多时候我们不希望成员变量使用默认值, 而是需要我们显式设定初值. 那么此时有五种方法供我们成员变量初始化:

1:默认初始化,即程序所赋予的默认值,上面已经讲过,此处不再过多陈述。

2:就地初始化:即在定义成员变量时便进行初始化,如下所示:

public String name = "张三";
public int age = 18;

3:类外初始化,即通过对象的引用进行初始化,这种方法一般用的最多,下面来看下实现过程:(注意私有的可通过setXX和getXX方法实现)

public static void main(String[] args) {
        Person person = new Person();
        person.name = "张三";
        person.age = 14;
        }

4:通过实例代码块和静态代码块进行初始化:这个在后面我们会专门讲到,在这里只需要知道这两个代码块的作用一般是提前初始化一些数据.

package Jiating;
public class Dog {String name; int age;float weight;public static void main(String[] args){Dog duoduo=new Dog();duoduo.name="多多";duoduo.age = 6;duoduo.weight =13.5f;Dog lucky=new Dog();lucky.name = "Lucky";lucky.age =3;lucky.weight =10.2f;System.out.println(duoduo.name + "今天" + duoduo.age +"岁了");System.out.println(lucky.name + "体重" + duoduo.weight +"千克");}
}

 1-4  成员方法

成员方法就是对象所具有的动态功能。基本格式如下:

【访问修饰符】【修饰符】【返回值类型】【方法名称】【参数】【异常】【方法体】

访问修饰符:public(公共的);protected(受保护的);无修饰符和private(私有的)。

修饰符:对属性特征的描述:如static,final,abstract 等等。

返回值类型:方法返回数据的类型。

方法名称:任何合法标识符。

参数:可以有多个,使用逗号分隔。

异常:关键字:throws 【具体异常】

方法体:该方法具体实现功能的地方。

package IFather;
public class MethodSample01 {public String isOddNumber(int num){System.out.println("原始数据为:"+num);if(num%2==0){return "偶数";}else{return "奇数";}}public static void main(String[] args) {/* int a=10;if(a%2==0){System.out.println(a+"是偶数 ");}else {System.out.println(a+"是奇数");}int b=5;if(b%2==0){System.out.println(b+"是偶数");}else{System.out.println(b+"是奇数");}*///在mian使用方法,先创建对象才能使用int a=10;MethodSample01 methodSample01=new MethodSample01();String r1=methodSample01.isOddNumber(a);System.out.println(a+"是"+r1);int b=5;String r2=methodSample01.isOddNumber(b);System.out.println(b+"是"+r2);}
}


二、  面向对象特性之封装

 2-1  Package

Java 包(package)

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

创建包
创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。

包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。

如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。

package com.micheal.test
public class Test {
}

2-2  访问修饰量

修饰类,变量,方法时:

public公共,任何地方都能使用;

private私有,只能在类中使用;

不加修饰词=default,包内其他类可以用;

protected继承,只能继承的子类可以使用;

访问修饰符:public protected default private
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
public:对所有类可见。使用对象:类、接口、变量、方法
protected:对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private: 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
外部如何访问内部的私有成员变量 适用本类中的共有方访问本类中的私有成员变量。

面向对象的三个基本特征是:封装、继承、多态。

package IFather;
public class PackageSample01 {//public代表其他任何类都能访问成员变量public String name;//private代表只能在当前类中使用private void sayHello(){System.out.println("Hello World");}//不写修饰符代表是默认修饰符,只能被包中其他类访问void sayGoodbye(){System.out.println("Good bye!");}public static void main(String[] args) {PackageSample01 packageSample01 = new PackageSample01();packageSample01.sayHello();}
}


2-3  面向对象封装

面型对象的三大特性:

封装          解决了数据的安全性问题。

继承        解决了代码的重用问题

多态        解决了程序的扩展问题

封装:是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

也可以理解为:存在一个边界,边界之内的细节隐藏起来,只留下对外的借口(如:笔记本,手机,饮水机)

例如:笔记本如果不加塑料外壳能用不,能用,不过就是不安全,不好看罢了。而如果我们把它包装一下,我们用的功能多了吗?没有,不过比不包装不仅好看了,更重要的是安全了很多,也方便我们带了。

封装的好处:

①   只能通过规定方法访问数据,安全、易用、简单、易维护。

②   隐藏类的实现细节

③   方便加入控制语句

④   方便修改实现经过封装的属性,不能直接访问,要通过公共属性get/set方法访问。

2-4  对成员变量进行续写封装

对成员变量进行读写封装,是为了不允许用户修改某一些成员变量

对只允许读,不允许写的变量,只生成get方法,不生成set方法

public class MobileNumber {private String owner;private String areaCode;private String mobileNumber;//getter方法,用于读取成员变量的内容//getter书写格式,public 成员变量类型 get 成员变量名(),PS:首字母大写public String getOwner() {//this关键字代表当前对象的...return this.owner;}public String getAreaCode() {//this关键字代表当前对象的...return this.areaCode;}//setter方法,setter方法用于设置成员变量的内容
//setter书写格式:public void set成员变量名(新的数据参数)public void setOwner(String owner) {this.owner = owner;}public void setAreaCode(String areaCode) {this.areaCode = areaCode;}
}public class MobileNumberTestor {public static void main(String[] args) {MobileNumber mobileNumber=new MobileNumber();mobileNumber.setOwner("老奇");String owner= mobileNumber.getOwner();System.out.println(owner);String areaCode=mobileNumber.getAreaCode();System.out.println(areaCode);}
}

三、   面向对象特性之继承

3-1  面向对象继承

继承是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。面向对象技术中,继承关系是一种模仿现实世界中继承关系的一种类之间的关系, 是超类(父类)和子类之间共享数据和方法的机制。父类定义公共的属性和操作,一个父类可以有多个子类,即多个特例。子类可以继承其父类或祖先类中的属性和操作作为自己的内容而不必自己定义,也可以覆盖这些操作,并加入新的内容。

继承:可以分单继承,多继承。

public class Mark1 {protected String title;protected String color;protected String movie;public void description(){System.out.println("型号:"+title);System.out.println("颜色:"+color);System.out.println("首次出现电影:"+movie);}private void fire(){System.out.println("利用手臂燃料泵射出火焰");}public static void main(String[] args) {Mark1 mark1=new Mark1();mark1.color="银灰色";mark1.movie="钢铁侠1";mark1.title="马克1型";mark1.description();mark1.fire();}
}

单继承

在默认情况下我们书写的一个Java类会自动继承Object类;如果使用”extends”关键字,我们也可以为它指定一个其它父类。那么,接下来的问题是“一个类可以指定几个父类呢”
在面向对象思维中只提到了有“继承”这种特性。但具体是“每个类可以同时继承多个父类(多继承)”还是“每个类只能有一个父类(单继承)”却并没有说明。所以现实当中,不同的面向对象的编程语言各有各的语法设计,而Java采用的是单继承。

package IFather;public class Hulk extends Mark1{public static void main (String[] args) {Hulk hulk = new Hulk();hulk.title ="反浩克装甲";hulk.color = "红色";hulk.movie = "复仇者联盟3";hulk.description();}
}

多继承

指一个子类同时继承多个父类,从而具备多个父类的特征

1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量

2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

package IFather;public class Mark85 extends Mark1{private void createShield() {System.out.println("利用纳米技术生成防御护盾");}public static void main(String[] args) {Mark85 mark85 = new Mark85();mark85.title ="马克85型";mark85.color ="红色";mark85.movie ="复仇者联盟4";mark85.description();mark85.createShield();}}

四、  面向对象特性之多态

4-1  面向对象多态

多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。

多态是继封装、继承之后,面向对象的第三大特性。

多态现实意义理解:

1.现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

2.Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,         一个Student的对象便既是Student,又是Person。

3.多态体现为父类引用变量可以指向子类对象。

4.前提条件:必须有子父类关系。

编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。

多态存在的三个必要条件

继承关系

方法重写

父类引用指向子类对象

接口:是一个抽象的类型,只提供方法的定义

实现类:是一个借口的具体实现,要实现每一个接口方法的功能

一个多态拥有多个接口

interface Language {public void voice();
}
public class Chinese implements Language{@Overridepublic void voice() {System.out.println("你好,有什么可以帮到你的?");}
}
public class English implements Language{@Overridepublic void voice() {System.out.println("Hi,may I help you?");}
}
public class French implements Language{
@Override
public void voice() {System.out.println("Comment puis-je me rendre a l'h pital");}
}
public class CustomerService {public static void main(String[] args) {Language language = new English();language.voice();Language languagel = new Chinese();languagel.voice();Language language2 = new French();language2.voice();}
}


4-2 ArrayList列表类的使用

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用前需要引入它,

ArrayList类从AbstractList类继承而来, 它实现了List接口。(集合接口由许多类实现,类实现了接口)ArrayList类是一个泛型类,声明为 :class ArrayList<E>, 类型E指定了列表要保存的对象的类型。

ArrayList类实现了动态数组, 可以根据需要增加或减小它的大小。

ArrayList类是一个特殊的数组--动态数组。来自于System.Collections命名空间;通过添加和删除元素,就可以动态改变数组的长度。

优点:

1、支持自动改变大小
2、可以灵活的插入元素
3、可以灵活的删除元素

package IFather;import java.util.ArrayList;
import java.util.List;
public class ArrayListSample {public static void main(String[] args) {//泛型<类型>,用于规范列表中的数据List<String> bookList=new ArrayList<String>();//创建ArrayList对象bookList.add("红楼梦");//向列表末端追加数据bookList.add("西游记");bookList.add("水浒传");bookList.add("三国志");bookList.add("index:0,element“镜花缘");System.out.println(bookList);String bookName=bookList.get(2);//得到指定索引位置(从0开始)System.out.println(bookName);int size=bookList.size();//得到列表总数System.out.println(size);bookList.remove(2);bookList.remove(bookList.size()-1);System.out.println(bookList);for (String book:bookList){System.out.println("《"+book+"》");}}
}

Java6-7章复习相关推荐

  1. 为什么计算机控制系统采用软,微型计算机控制技术一二章复习资料及部分答案...

    <微型计算机控制技术一二章复习资料及部分答案>由会员分享,可在线阅读,更多相关<微型计算机控制技术一二章复习资料及部分答案(7页珍藏版)>请在人人文库网上搜索. 1.第一.二章 ...

  2. 计算机组成原理白朔飞,计算机组成原理(第四章复习).ppt

    计算机组成原理(第四章复习) 计算机组成原理 第四章 指令系统 本章复习要点: 1. 理解指令的基本格式. 定长与扩展操作码格式 2. 掌握指令寻址方式的基 本概念.常见寻址方式 及其有效地址的计算 ...

  3. 计算机网络前三章试题,计算机网络前三章复习试题PPT课件.ppt

    计算机网络前三章复习试题PPT课件 前三章复习;1.Internet最早起源于 .A.ARPAnet B.MILnet C.NSFnet D. ANSnet2.广域网中广泛采用的拓扑结构是.A.树状 ...

  4. 软件工程导论第三章复习总结附思维导图

    软件工程导论第三章复习总结附思维导图 概述 准确回答"系统必须做什么" 必须理解并描述问题的信息域,根据这条准则应该建立数据模型 必须定义软件应该完成的功能,这条准则要求建立功能模 ...

  5. 2java第一章复习总结

    1.注释 (1)单行注释 // (2)多行注释 /*开头,*/结尾 ,不能嵌套使用 (3)文档注释,java特有,能生成网页 为/**开头,*/结尾 总结: 2.java的编写-编译-运行 编写:将你 ...

  6. 软件工程导论第五章复习总结附思维导图及部分习题答案

    软件工程导论第五章复习总结附思维导图及部分习题答案 总体设计 一.设计过程 1.设想提供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.设计数据库 7.制定测试计 ...

  7. Java6、7章复习 5.4

    目录 面向对象概述 6.12类 6.1.3面向对象程序设计的特点 成员方法在Java语言中,成员方法对应于类对象的行为,它主要用来定义类可执行的操作,它是包含一系列语句的代码块,本节将对成员方法进行详 ...

  8. shiro入门8:Shiro前几章复习

    前几章对应的地址:[从1开始吧] http://blog.csdn.net/nthack5730/article/details/50964539 http://blog.csdn.net/nthac ...

  9. 《精通javascript》5,6章复习(三)

    想想还是把标题改成复习好点,因为书中的知识点挺多而且细,不好概括,凡是觉得重要的我都想提一提把code重新打一遍.继续(二)的内容,接下来该是从DOM删除一个节点:NodeParent.removeC ...

  10. java第二章复习_JAVA第二章知识点

    JAVA第二章知识点 本章知识梳理 2.1 关键字 2.2 标识符 2.3 变 量 2.4运算符 2.5 程序流程控制 2.6 方法 2.1 关键字 关键字(keyword)的定义和特点 定义:被ja ...

最新文章

  1. 卡顿严重_魔兽怀旧服:安其拉开门二测结果出炉,暴雪依然无法解决卡顿问题...
  2. .NET面向上下文、AOP架构模式(实现)
  3. 石墨烯可将硬盘容量提高十倍,剑桥在Nature子刊发表最新研究
  4. img 标签 访问图片 返回403 forbidden问题
  5. vector的元素不仅仅可以使int,double,string,还可以是结构体
  6. [FF-A]-01-Introduction
  7. Pytorch-张量相加的四种方法 / .item()用法
  8. Spring WebApplicationContext
  9. sql-bench mysql_MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench
  10. 开关怎么使用_水龙头漏水怎么办?使用时把控开关力度很重要
  11. Chrome和Firefox浏览器长截图
  12. 51单片机基本刷屏测试实验_51单片机实验
  13. jquery.cookie中的操作
  14. sql sum求和 值小于不显示_mysql中sum求和等类似方法关于null值的处理
  15. 数组 -- 3Sum Closet -- 图解
  16. Xshell正版免费,再也不用找破解版了!
  17. Spring Aop 的配置与运用
  18. 数字图像/视频处理MATLAB基本操作
  19. 为何干电池是1.5v?而充电电池是1.2v?
  20. 对缓存投毒的学习总结

热门文章

  1. php网页视频播放插件下载_php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)...
  2. 如何获取公司间采购订单或销售订单的交货状态
  3. 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
  4. XMUT第七届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛模拟赛
  5. 200多元打造笔记本导航!超值GPS模块推荐
  6. Banana Pi BPI-M2U不能烧写原因分析
  7. 定压补水装置 隔膜式定压补水装置
  8. 微服务--数据一致性
  9. Java 并发小册 2022 索引版正式来袭,持续更新
  10. 语音处理入门概念整理(一)