Java封装、继承、多态三大特征的理解
作者:hansheng 发布时间:2023-07-16 14:26:46
首先先简单的说一下其3大特性的定义:
封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。封装的基本要求是: 把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。
继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。在开发中尽量减少继承关系,这样做是为了把程序的耦合度降低。
多态:多态又分为设计时多态和运行时多态,例如重载又被称为设计时多态,而对于覆盖或继承的方法,JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。总而言之,面向对象的设计的典型特点就是继承,封装和多态,这些特点也是面向对象之所以能如此盛行的关键所在。
封装
java中类的属性的访问权限默认值不是private,要想隐藏该属性的方法,就可以加private修饰符,来限制只能够在类的内部进行访问。
对于类中的私有属性,要对其给出一对方法(getXXX,setXXX())访问私有属性,保证对私有属性的操作和安全性。
方法的封装,该公开的公开,该隐藏的隐藏。
java的继承
继承,是对有着共同特性的多类事物,进行再抽象成一个类。
java中的继承要使用extends关键字,并且java中指允许单继承,也就是一个类只能有一个父类。
构造方法不能被继承。
java方法中的覆盖
子类中有和父类中可访问的同名同返回同参数列表的方法时,就会覆盖从父类继承来的方法。
super()关键字
super(),表示在子类的构造方法调用父类的构造方法时,super()也只能在构造方法中的第一句。
java中的多态
有两种多态的机制:编译时多态、运行时多态
1、方法的重载:重载是指同一类中有多个同名的方法,但这些方法有着不同的参数。,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。
2、方法的覆盖:子类可以覆盖父类的方法,因此同样的方法会在父类中与子类中有着不同的表现形式。在java语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向子类的实例对象,同样,接口中的引用变量也可以指向其实现类的实例对象。
public class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}
public class C extends B{
}
public class D extends B{
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println("1--" + a1.show(b));
System.out.println("2--" + a1.show(c));
System.out.println("3--" + a1.show(d));
System.out.println("4--" + a2.show(b));
System.out.println("5--" + a2.show(c));
System.out.println("6--" + a2.show(d));
System.out.println("7--" + b.show(b));
System.out.println("8--" + b.show(c));
System.out.println("9--" + b.show(d));
}
}
1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D
当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。
这我们用一个例子来说明这句话所代表的含义:a2.show(b);
这里a2是引用变量,为A类型,它引用的是B对象,因此按照上面那句话的意思是说有B来决定调用谁的方法,所以a2.show(b)应该要调用B中的show(B obj),产生的结果应该是“B and B”,但是为什么会与前面的运行结果产生差异呢?这里我们忽略了后面那句话“但是这儿被调用的方法必须是在超类中定义过的”,那么show(B obj)在A类中存在吗?根本就不存在!所以这句话在这里不适用?那么难道是这句话错误了?非也!其实这句话还隐含这这句话:它仍然要按照继承链中调用方法的优先级来确认。所以它才会在A类中找到show(A obj),同时由于B重写了该方法所以才会调用B类中的方法,否则就会调用A类中的方法。
以上所述是小编给大家介绍的Java封装、继承、多态三大特征的理解,希望对大家有所帮助


猜你喜欢
- 本文这个实例通过前面学过的Paint、Canvas等2D绘画技术来实现一个简单的Android的绘图板。具体实现代码:创建一个名为DrawV
- 何为系统APP何为三方APP?位于system分区内的是系统软件,位于data分区得的是第三方后安装的软件系统软件是指控制和协调计算机及外部
- 安卓的三种本地的典型数据存储方式SharedPreferences以文件格式保存在本地存储中SQL数据库IDE : Android Stud
- 错误Mybatis-Plus (简称MP) 是mybatis的一个增强工具,在mybatis的基础上只做增强不做改变,简化了开发效率。其实就
- 1. 源起:仍然是模块化编程所引发的需求。产品经理难伺候,女产品经理更甚之~:p纯属戏谑,技术方案与产品经理无关,芋头莫怪!VCU10项目重
- 本文实例为大家分享了java实现单链表、双向链表的相关代码,供大家参考,具体内容如下java实现单链表:package code;class
- Objects工具类jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法重点方法equals用于字符串和包装对象的比
- 前言HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要
- Spring Cloud Gateway是Spring 官方基于Spring 5.0、Spring Boot 2.0和Project Rea
- 附GitHub源码:WebViewExplore一、WebView的基础配置WebSettings ws = getSettings();w
- 多线程安全嘛在 Spring 框架中,Bean 是应用程序的核心构建块,代表了在 Spring 容器中管理的对象或组件。Spring 容器负
- 如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类。这个类按照键给元素排序。这个集合中的值
- 效果:原图加水印后的图片废话不多说,直接上代码代码:package com.example.demo;import java.awt.Alp
- 双色球选号规则红球是1~33选6个,蓝球1~16选1个。它有17721088种排列组合,这个代码实现了如何将一组双色球号码 转换成第n个排列
- 本文实例讲述了c#图像截取的实现方法。分享给大家供大家参考。具体如下:图像截取的相关代码如下: public Form1()&nb
- 本文实例讲述了Android编程中context及全局变量的用法。分享给大家供大家参考,具体如下:今天在研究context的时候,对appl
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 1、实现效果:项目的整体的日志打印级别为ERROR,但在某个包下或某个类想打印INFO级别的日志。2、配置:FILE是ERROR级别日志打印
- Class:EcanRMB.cs using System; using System.Collections.Gen
- 什么是注解?对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安