Java入门笔记 03-面向对象(中)
介绍:这部分内容主要是介绍和总结封装、继承和多态。
一、 封装:把该隐藏的隐藏起来,把该暴露的暴露出来
封装是指将信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
1. 访问控制符:
Java提供了三个访问控制符:private、protected和public,以及一个不加任何访问控制符的default访问控制级别,下图描述了访问控制级别从小到大:
2. 访问控制符的使用原则:
- 类里面的绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰;
- 有些只用于辅助该类实现的其他方法(工具方法)也应该使用private修饰;
- 某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不是被外界直接调用,则应该使用protected来修饰;
- 希望暴露出来给其他类自由调用的方法应该使用public修饰。
3. 举例:
public class Person {
private String name;
private int age; public void eat() {
System.out.println("Human:eat");
} public void walk() {
System.out.println("Human:walk");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }
二、 继承:extends
1. 继承的特点:Java的继承具有单继承的特点,每个子类只有一个直接父类。
2. 重写父类的方法:子类包含与父类同名的方法的现象被称为方法重写,也被称为方法覆盖。重写需要遵循“两同两小一大”的规则:
- 方法名相同、形参列表相同;
- 子类方法返回值类型以及抛出的 异常应该比父类的更小或相等;
- 子类方法的访问权限应该要比父类方法要更大或相等
如果父类方法具有private访问权限,则该方法对子类是透明的,此时在子类中定义一个与父类同名、同形参列表的private方法时,不是重写,只是在子类中重新定义了一个新方法。
3. super()方法:super不能出现在static修饰的方法中
如果需要在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的事非static方法)或者父类类名(被覆盖的是static方法)来作为调用者进行调用。
4. 调用父类构造器:在子类构造器中调用父类构造器使用super调用来完成,并且必须出现在构造器的第一行。
三、 多态:
如果编译时类型(左边)和运行时类型(右边)不同,就可能出现所谓的多态,即父类的引用指向子类的对象,并且多态性只适用于方法,不适用于属性(成员变量)。
1. 引用变量的强制类型转换:只能在具有继承关系的两个类型之间进行。
- 向上转型:把子类对象赋给父类引用变量,这种转型总是可行的;
- 向下转型:需要使用强制类型转换,并且这个对象必须实际上是子类实例才行(即编译时类型为父类类型,运行时类型是子类类型),否则在运行时会引发ClassCastException异常。
2. instanceof:在进行类型转换前应该通过instanceof运算符来判断前面的对象是否为后面的类或子类或实现类的实例。
Person p2 = new Man();//多态
//************向下转型************
if(p2 instanceof Man) //为了避免ClassCastException,使用instanceof来进行判断
Man m1 = (Man)p2;//使用强制类型转换符
四、 其他:
1. JavaBean:JavaBean是一种Java语言写成的可重用组件,是指符合如下标准的Java类
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、 set方法
class JavaBeanTest{
private String name;
private int age; public JavaBean() { } public void setName(String n) {
name = n;
} public void setAge(int a) {
age = a;
} public String getName() {
return name;
} public int getAge() {
return age;
}
}
2. 代码块(初始化块):对Java类或对象进行初始化
- 静态代码块:用static 修饰的代码块
1. 可以有输出语句。
2. 可以对类的属性、类的声明进行初始化操作。
3. 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。
4. 若有多个静态的代码块,那么按照从上到下的顺序依次执行。
5. 静态代码块的执行要先于非静态代码块。
6. 静态代码块随着类的加载而加载,且只执行一次。
- 非静态代码块:没有static修饰的代码块
1. 可以有输出语句。
2. 可以对类的属性、 类的声明进行初始化操作。
3. 除了调用非静态的结构外, 还可以调用静态的变量或方法。
4. 若有多个非静态的代码块, 那么按照从上到下的顺序依次执行。
5. 每次创建对象的时候, 都会执行一次。 且先于构造器执行。
Java入门笔记 03-面向对象(中)的更多相关文章
- Java学习笔记:03面向对象-接口_多态
1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java入门姿势【面向对象3】构造方法及其重载_方法的调用
上次我为大家写出啦"定义类与创建对象_了解局部变量",上篇文章代码可能较多,如没有了解透彻的话请打开下方文章在进行观看一下哦!! [Java入门姿势[面向对象2]定义类与创建对象_ ...
- [Java入门笔记] 面向对象三大特征之:封装
了解封装 什么是封装? 在Java的面向对象程序设计中,有三大基本特征:封装.继承和多态.首先我们先来看看封装: 在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实 ...
- Java入门笔记 00-前言&目录
前言:这本笔记记录的是Java基础部分的学习内容,大部分内容总结性的,包括: ---01 Java基础语法 ---02 数组 ---03 面向对象 ---04 异常处理 ---05 多线程 ---06 ...
- [Java入门笔记] Java语言简介
前言 学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中.网上的文章,视频等资料,整理与回顾Java的知识点. 言归正传,让我们先从了解Java语言开始. Java语言的由来 J ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- [Java入门笔记] 面向对象三大特征之:继承
理解什么是继承 首先我们知道,面对对象有三大特征: 封装:解决了数据的安全性问题 继承:解决了代码的重用问题 多态:解决了程序的扩展问题 上一篇博客中,我们了解了一下封装,现在我了再来看看什么是继承. ...
- [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量
在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.
随机推荐
- .net_DevExpress控件使用经验总结
(转)DevExpress控件使用经验总结DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或 ...
- thows,thow和try catch的区别
1.throw是当前方法不处理这个异常,由它的上一级进行处理.并且抛出异常后将停止执行代码. package myProject; public class ExceptionTest { //测试t ...
- 生产环境实践:Cana实现MySQL到ES实时同步
注:由于文章篇幅有限,完整文档可扫下面二维码免费获取,更有深受好评的大数据实战精英+架构师好课等着你. 速点链接加入高手战队:http://www.dajiangtai.com/course/112. ...
- Java-POJ1013-Counterfeit Dollar
在13枚硬币中找出fake的那一个 输入:三次天平称量结果 package poj.ProblemSet; import java.util.Scanner; /* 我怎么觉得是贪心算法呢? 起初对所 ...
- 【转】git rebase详解
git合并代码方式主要有两种方式,分别为:1.merge处理,这是大家比较能理解的方式.2.rebase处理,中文此处翻译为衍合过程. git rebase操作讲解例子: cd /usr/local/ ...
- Servlet文件上传下载
今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...
- SpringBoot自学的第1天——寻找模板引擎Thymeleaf
第一步:先进入spring官网 https://spring.io/ 第二步:进入spring官网后找到导航栏上的Projects——>SpringBoot点击进去 第三步:点击——>LE ...
- Django_Setings
""" Django settings for untitled1 project. Generated by 'django-admin startproject' u ...
- Attribute "resultType" must be declared for element type "update" or "insert"
仔细查看错误如图所示: 解决错误就是把resultType去掉,因为在insert和update语句中是没有返回值的.小坑小坑 转自:https://blog.csdn.net/u013144287/ ...
- java基础(八)之函数的复写/重写(override)
复写的意思就是子类对父类的修改. 复写的条件: 1.在具有父子类关系的两个类当中:2.父类和子类各有一个函数,这两个函数的定义保持一致(返回值类型.函数名.参数列表) 还是老样子,3个文件来说明. P ...