Java复习5.面向对象
Java 复习5面向对象知识 20131004
前言:
前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更加严格的面向对象的语言。面向对象是JAVA语言最大的特点。
1.基本概念
面向对象在程序中开始指的是采用封装、继承、抽象的设计方法,如今以发展到整个软件行业,如OOA(面向对象分析), OOD(面向对象设计), OOP(面向对象的编程)。
面向对象的特点:
对象的唯一性,每一个对象都会有一个唯一的标识,通过标识,可以找到相应的对象,在对象的整个生命周期内对象的标识不会变化。
抽象性:将相同的数据结构和操作方法抽象成类
继承性:类之间是可以集成的,使用关键字 extends ,同时可以实现多个接口使用关键字implements
多态性:同一种方法对于不同的类有不同的表现方式;
封装性:将对象的属性和操作封装起来,当做一个整体对象,而不必公开对象的属性和操作。
2.Java中的抽象类使用 abstract关键字实现,其中在抽象类中,需要有抽象方法,使用关键了abstract关键字声明方法是抽象方法,这种抽象方法需要在子类中实现,除非子类也是抽象类。抽象类是不可以直接实例化,只有抽象类中才可以使用abstract关键字修饰方法为抽象方法。
3对于Java程序中可以使用不同package下面的同一个名称的类,但是使用的时候,需要使用全名,确定使用的是那一个包下面的类,否则会产生二义性,编译无法通过。
4.Java中是不支持多重继承的,继承使用的关键字是extends关键字,继承除了父类的static变量和函数之外,都是继承下来,但是因为访问权限,所以可能在子类中无法访问。
调用父类的构造方法使用关键字super(参数);
在子类中可以使用关键字super访问父类中的方法。
继承的时候是将父类中的所有的属性和方法都继承下来(除了static 方法和属性),这样如果在子类中重新声明的属性和变量,就会将子类的覆盖掉,但是数据结构中任然存在父类的属性,我们这里的覆盖知识作用域上的覆盖,而是不是将值覆盖掉。
public class Chou {
protected int a = 10;
Chou(int a){this.a =a ;}
void getA(){System.out.println("Chou: a = " + this.a);}
}
public class Zilei extends Chou {
protected int a = 13;
Zilei(int a) {
super(a);this.a = a*2;
}
void getA() {
System.out.println("Chou: a = " + super.a);
System.out.println("Zilei: a = " +this.a);
}
}
在C++中使用的是父类的名字作为作用域访问。
class Base{
protected:
int a;
Base(int a){
this->a = a;
}
public:
virtual void getVal() = 0;
};
class Derived: public Base{
protected:
int a;
public:
Derived(int a):Base(a),a(a*2){}
void getVal(){
cout << "Base : a= " << Base::a << endl;
cout << "Derived : a=" << this->a << endl;
}
};
5.继承,多态,重载,重写, 覆盖
回忆一下曾经整理的C++的重载,重写,覆盖,比较麻烦,所以最好这些知识,今天在学习Java,不存在覆盖的情况,所以比较简单。同时首先解决一个问题就是参数传递不匹配的情况。
首先是C++中:
int add(int a, int b){
cout << "a=" << a << ",b = " << b << endl;
return a+b;
}
Main:
double a = 1.2, b = 1.3;
add(a,b);这样是允许编译的,编译的时候会出现waring,提示从double转换成int会丢失精度。如果想高精度转换的话,不会产生waring和error。
在Java中低精度向高精度转换的话,不会出错,但是高精度转换成低精度的,编译不通过。
public static double add(double a, double b){
System.out.println("a="+a + ",b = " + b);
return a+b;
}
int a = 1, b = 2; add(a,b);这样是可以的,但是反过来是不可以的。
在Java中有重载,就是函数的参数类型、数目,顺序不同,这样的函数是在编译期间决定的,叫做静态绑定;而重写是在Class继承中的,叫做重写,这样的话,是在运行期间绑定的,叫做动态绑定,实现类的多态机制。
6.Java中的接口
在C++中是没有怎么使用接口,所以接口的概念比较淡,但是在Java中,只支持单继承,所以接口的作用就十分重要了。接口需要类实现使用关键字implements,在一个class中可以实现多个接口。
定义接口:接口就是只负责声明,不负责实现的,一旦定义一个接口,他可以被任何class实现,在接口中的内容有两种:
抽象方法,全部都是使用public abstract 修饰的,即使我们不适用关键字修饰的话,也是public abstract 修饰的,不可以改变,保证可以被任何类实现。
常量:一定是常量,不可能存在变量,而且是静态的,final,public
同时接口一定是public修饰的,不可以是其他的修饰符。
追梦的飞飞
于广州中山大学 20131004
HomePage: http://yangtengfei.duapp.com
Java复习5.面向对象的更多相关文章
- java复习(1)面向对象
一.面向对象的概念 ----------------------------------------------------- 1.理解面向对象:(1)面向对象是相对于面向过程的语言 (2)面向对象和 ...
- java复习面向对象(二)
java复习面向对象(二) 1.static关键字 举例图片 静态变量 使用static修饰的成员变量是静态变量 如果一个成员变量使用了关键字static,那么这个变量不属于对象自己,而属于所在的类多 ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- Java复习9网路编程
Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...
- Java复习8.多线程
Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...
- java 复习整理(一 java简介和基础语法)
现在公司用的是封装太多东西的平台开发,觉着之前学的东西很多都忘了,所以想好好总结回顾一下.之前总是想学很多编程语言像python.s6.node.react,但现在越来越体会到编程语言只是一个开发的工 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- 【Maven】在intellij里,体验Maven
1:配置Maven 从官网下载,然后将bin目录添加到系统变量Path中, 在cmd窗口,输入mvn,有执行反馈即配置成功. 配置conf/settings.xml文件,指定仓库中心下载到本地的目录 ...
- Hadoop集群的各部分常用端口
hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...
- C++编程中设置文件长度的方法
转自:http://blog.csdn.net/rrrfff/article/details/6705685 bool SetFileLength(const char *FilePath, off_ ...
- 【Thinking in Java, 4e】初始化与清理
[用构造器确保初始化] [方法重载] 涉及基本类型的重载 1.如果传入的数据类型小于方法中声明的形式参数类型:实际数据类型会被提升. 2.如果传入的数据类型大于方法中声明的形式参数类型:编译器报错,应 ...
- Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置
0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...
- 20145314郑凯杰 《Java程序设计》实验五 实验报告
20145314郑凯杰 <Java程序设计>实验五 实验报告 实验搭档王亦徐:http://www.cnblogs.com/1152wyx/p/5471524.html 实验要求 完成实验 ...
- 《Java程序设计》实验2实验报告
20145318 <Java程序设计>实验2 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 ...
- 20145321 《Java程序设计》第10周学习总结
20145321 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. IP地址:为了能够方便的识别网络上 ...
- 20145324 《Java程序设计》第8周学习总结
20145324 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 1.NIO使用频道来衔接数据节点,可以设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记,提供clear ...
- MR案例:倒排索引
1.map阶段:将单词和URI组成Key值(如“MapReduce :1.txt”),将词频作为value. 利用MR框架自带的Map端排序,将同一文档的相同单词的词频组成列表,传递给Combine过 ...