Java面向对象的特征
面向对象的特征
封装、继承、多态、(有人问第四个特征,再加抽象)
封装
体现形式(2种)
函数---提高代码的复用性
属性的私有化---将属性设置为私有的,通过提供对外的访问方法来间接操作对应属性,可以在方法内对属性做一系列的限定使之符合要求---提高了代码的安全性
private 默认 protected public
1 2.5 3 4
本类 子类 同包类 其他类
权限修饰符
|
本类 |
子类 |
同包类 |
其他类 |
|
|
public |
可以 |
可以 |
可以 |
可以 |
|
protected |
可以 |
可以 |
可以 |
不行 |
|
private |
可以 |
不行 |
不行 |
不行 |
|
默认 |
可以 |
同包子类可以 |
可以 |
不行 |
继承
对一些类中共有的属性和方法进行提取,提取出来一个新的类,通过extends关键字是新的类和原来的来产生联系,这种联系称之为继承。新的类称之为父类(超类、基类),原来的类称之为子类(派生类)
注意:Java中支持的是单继承---一个子类只能有一个父类,而一个父类可以有多个子类
class A {
public int m(){return ;}
}
class B {
public String m(){return “aaa”;}
}
class C extends A, B {}
C c = new C();
c.m();---返回值类型是什么?
优点
1. 提高安全性
2. 提高复用性
3. 统一结构
super关键字
在创建子类对象的时候,会先创建一个父类对象,而这个父类对象在子类中以super关键字的形式存在。super是父类对象的引用,可以认为是父类产生的一个虚拟对象
如果一个构造函数中已经存在了this语句,那么此时不能写super语句,此时如何创建父类对象?---this语句的作用?
子类的每个构造函数中都直接或者间接地有一个super语句---对
如果父类只提供了含参构造,子类的构造函数还能使用默认的super语句吗?---不能
可以通过this来调用父类中的方法或者属性吗?---可以。会先检查当前类中是否有对应属性,如果没有则再检查父类。

重写
在父子类中,存在了方法签名完全一致的方法,称之为函数的重写/覆盖
注意:重写遵守的五个原则:两等两小一大
1. 方法签名一致
2. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
3. 当父类中的方法的返回值类型是引用数据类型的时候,子类方法的返回值类型要么和父类方法的返回值类型一致,或者子类方法的返回值类型是父类方法的返回值类型的子类
class A{
public Pet m(){}
}
class B extends A {
public Dog m(){};
}
4.子类方法的权限修饰符的范围要大于等于父类方法中权限修饰符的范围
多态
体现形式
编译时多态---重载
运行时多态---向上造型,重写---继承是运行时多态的前提
注意:用向上造型创建对象的时候,用父类声明,用子类创建;父类在声明的时候就相当于给了这个对象一份提纲;子类创建对象的时候是告诉这个对象该怎么干---能不能用看父类,具体执行看子类
重写的理解
1. 方法签名完全一致
2. 子类重写的方法的权限修饰符要大于等于父类
class A{
public void m(){}
}
class B extends A{
protected void m(){}
}
A a = new B();
a.m(); //a对象用A类来声明的,同时告诉a对象身上有一个公共的m方法,可以在任何地方使用;
在使用方法的时候需要看具体子类,这时候,子类中重写的这个方法告诉a不能在其他类中使用---这时候产生了冲突
3. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
注意:八种基本数据类型之间是相互平等的,不存在继承关系
4. 当父类中的方法的返回值类型是引用数据类型的时候,子类方法的返回值类型要么和父类方法的返回值类型一致,或者子类方法的返回值类型是父类方法的返回值类型的子类
class A {
public void m(){}
}
class B extends A {
public void m(){}
public void mb(){}
}
class C {
public B mc(){return new B();}
}
class D extends C {
public A mc(){return new A();}
}
C c = new D();
c.mc().mb(); //声明c对象用的是C类,告诉了c对象身上有一个mc方法,并且返回值类型是B类,所以调用mc方法的时候可以用一个B类对象来接住结果,可以再次调用B类独显身上的mb方法;
实现用的是D类,具体执行mc方法的时候调用的是D类中的mc方法,D类中mc方法的返回值类型是A类,所以可以定义一个A类对象来接住方法执行后的结果,A身上有mb方法吗?---产生冲突
多态的产生是为了解耦
static
可以修饰变量、方法、代码块、内部类
类变量
static修饰变量,这个变量称之为成员变量或者类变量。静态变量随着类的加载而加载到方法区中的静态区,并且在静态区中被赋予初始值。由于静态变量是先于对象而存在的,可以通过对象来调用,也可以通过类名来调用,一般是通过类名来调用。由于该类创建的所有对象存储的是静态属性在静态区中的地址值,所以静态属性是被所有对象所共享的。---静态属性尽量少用

Java面向对象的特征的更多相关文章
- Java——面向对象的特征三:多态性
2.5面向对象的特征三:多态性 2.5.1 关于java语言中的向上转型和向下转型 ①向上转型(upcasting) : 子--->父(自动类型转换) ②向下转型(downcasting) : ...
- Java——面向对象的特征二:继承性
2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...
- Java面向对象的特征一:封装性
1.4 面向对象的特征一:封装性 当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象属性赋值的话,可能会出现不满足实际情况的意外,我们考虑不让对象来直接作用属性,而 ...
- 封装继承多态-java面向对象三大特征
第七章 封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...
- Java面向对象和特征
面向对象: 概念: 面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使 ...
- Java面向对象三大特征
封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:人{ 年龄 ...
- Java面向对象的特征与含义
面向对象的主要特征包括抽象.继承.封装和多态. 抽象 把一个类对象的共同特征总结出来,构造新类的过程. 继承 从已有类中得到继承信息,创建新类的过程. 封装 把数据和对数据的操作绑定起来,对数据的访问 ...
- Java 面向对象三大特征之一: 多态
多态与类型转换 子类重写父类方法 1)位置:子类和父类中有同名的方法 2)方法名相同,返回类型和修饰符相同,参数列表相同 方法体不同 多态的优势和应用场合 多态:同一个引用类型,使用不同的 ...
- 简述Java面向对象三大特征:封装、继承、多态
封装: 把对象的全部属性和服务结合在一起,形成不可分割的独立单位: 尽可能隐藏内部细节.(数据隐藏.隐藏具体实现的细节) public.private.protected.default pu ...
随机推荐
- 基础教程:上传/下载ASP.NET Core 2.0中的文件
问题 如何上传和下载ASP.NET Core MVC中的文件. 解 在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件. publicvoid ConfigureServices( ...
- UWP 返回顶部按钮
返回顶部的按钮,like this 当用户下滑了一定的距离之后,通常是快滑倒底部的时候,出现返回顶部按钮,当用户向上快滑,滑到顶部的时候,返回顶部按钮自动消失. 在UWP中,用来滚动内容的控件是Scr ...
- python学习总结笔记(一)
1.raw_input("请输入:")提示录入信息,读取录入的字符串返回你录入的字符串2.os.environ 获取所有系统的环境变量,返回一个字典.3.str与repr区别str ...
- javaweb-3-在Eclipse中引入Tomcat
一.在Eclipse中引入Tomcat 第一步: 第二步: 第三步: 第四部:
- 07深入理解Java线程池
之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度 ...
- Orchard Core一分钟搭建ASP.NET Core CMS
Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...
- 流式处理的新贵 Kafka Stream - Kafka设计解析(七)
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Ka ...
- android studio 默认 .gitignore 文件模板
# built application files*.apk*.ap_ # files for the dex VM*.dex # Java class files*.class # generate ...
- iOS开发 关于addChildViewController的理解
iOS开发 关于addChildViewController的理解 前言 我之前是做Android开发的接触ios开发不到一个月的时间,所以在有些东理解上会不自觉的向Android方向靠拢. 理解 通 ...
- Python基础学习-'module' object has no attribute 'urlopen'解决方法
import numpy as npimport urlliburl = "http://archive.ics.uci.edu/ml/machine-learning-databases/ ...