面向对象(二)- java

面向对象(二)

一、封装

封装使得对代码的修改更加安全和容易。将代码分成了一个个相对独立的单元。

封装所带来的好处是:明确的指出了那些属性和方法是外部可以访问的。这样当你需要调整这个类的代码时,只要

保证公有(Public:)属性不变,公有方法的参数和返回值类型不变,那么你就可以尽情的修改这个类,而不会影响到

程序的其他部分,或者是使用到这个类 的其他程序。这就是为什么说的“在 OOP 中,对代码访问控制得越严格,

日后你对代码修改的自由就越大”。

封装使整个软件开发复杂度大大降低,能很好的使用别人的类(class),而不必关心其内部逻辑是如何实现的。

你能很容易学会使用别人写好的代码,这就让软件协同开发的难度大大降低。

封装还避免了命名冲突的问题。封装有隔离作用。电话上的按键和电视遥控器上的按键肯定用处不同。但它们都可

以叫做按键,为什么你没有弄混呢?很显然一个属于电话类一个属于遥控器类。不同的类中可以有相同名称的方法

和属性,但不会混淆。

1、访问权限

通过访问权限 public protected default private 来封装类、方法及属性,达到隐藏细节的目的,最终达到“该露的

露,不该露的别瞎露”目的。
在这里插入图片描述

2、PO:Javabean

在编写 javabean 中的有一些常用的规则如: 1)、属性尽可能私有化 private 2)、访问器: setter 与 getter 访问器

>private ,一般 public 居多

setterXxx: 存储 与 getterXxx: 查看

    public class Person { //姓名
    private String name; //年龄
    private int age; //性别
    private boolean sex;

    public Person() { 
    }

    //setter与getter
    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; 
    }

    public boolean isSex() { 
        return sex; 
    }
    public void setSex(boolean sex) { 
        this.sex = sex; 
    }

二、类的继承

1、继承

继承:子承父业

继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。同时使用

继承可以提高代码的复用性。(事实上,利用组合可以更好的实现代码复用!)extends的意思是“扩展”。子类是

父类的扩展。

语法规则: java中使用extends关键字实现类的继承机制

	<modifier> class <name> [extends <superclass>]{}

作用:

实现代码的复用,延续+扩展父类信息。

通过继承,子类自动拥有了基类的所有成员(成员变量和成员方法)。

注意:

java 中只有单继承,没有像 c++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。 “一个

孩子只有一个亲爸爸” 。

即 Java只支持单继承,不允许多继承:一个子类只能拥有一个直接基类,但是一个基类可以派生出多个子类

2、重写

父类不满足子类的要求,按需改写。注意 方法签名必须相同

“==”:方法名、形参列表相同。

“≤≤”:返回值类型(基本类型必须相同)和异常类型,子类小于等于父类。

“≥”:访问权限,子类大于等于父类

    class F{ 
        int test(int a){ 
            return a*100; 
        } 
    }
    class C{ 
        //重写
        public int test(int a){ 
            return a*100*100; 
        } 
    }

注意属性不会重写 注意以下方法不会重写

  • 1、静态方法不会重写 ,父类为静态,子类只能为静态,否则编译错误

  • 2、fifinal 修饰方法 否则编译错误

  • 3、私有方法不会重写

3、Object继承链

  • Object 类是所有 Java 类的根基类

  • 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类

	public class Person { ... }

等价于

public class Person extends Object { ... }
  • toString: 对象的字符串表示

  • equals:比较相等,默认地址比较(”第一个盒子的比较”),要比较第二个 盒子需要重写

4、实例化过程

实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹结构. “先父类后子类, 先静态后成员”。

    public class F{ 
        static{ 
            System.out.println("父类静态块"); 
        }
        { 
            System.out.println("=========="); 
            System.out.println("父类构造块"); 
        }
        public F(){ 
            System.out.println("父类构造器"); 
        } 
    }
    public class C extends F{ 
        static{ 
            System.out.println("子类静态块"); 
        }

        { 
            System.out.println("子类构造块"); 
        }
        public C(){ 
            //super(); 
            System.out.println("子类构造器"); 
            System.out.println("=========="); 
        } 
    }

5、super

子类中,使用 super 指代父类的信息(注意访问权限),或者父类的构造器

    public class Test {
        public static void main(String[] args) { 
            new ChildClass().f(); 
        } 
    }
    class Father {
        public int value; public Father(){ 
        }
        public Father(int a){ 
            value =a; 
            System.out.println("Father(int)"); 
        }
        public void f(){ 
            value = 100; 
            System.out.println("Father.value="+value); 
        } 
    }
    class Child extends Father {
        public int value;

        public Child(){ 
            super(12); 
        }
        public void f() { 
        super.f(); 
        value = 200; 
        System.out.println("Child.value="+value); 
        System.out.println(value); 
        System.out.println(super.value); 
        } 
    }

6、final

final 表示最终的。

  • 修饰类,表示该类不能被继承

  • 修饰方法,表示该方法不能被重写

  • 修饰属性,表示常量,值一旦确定不可改变

    class F{
        public final String STR="bjsxt is very good"; 
        //最终的方法
        public final void test(){ 
            System.out.println("f-->test()"); 
        } 
    }
    //最终的类 
    final class C extends F{ 
        /*
            //此方法不能别重写
            public void test(){ 
            System.out.println("c-->test()"); 
            }
        */
    }/* class D extends C{ }*/

热门文章

暂无图片
编程学习 ·

Java中的反射(1)

Java中的反射 一、概念: 1、反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2、反射 (Reflection) 是 Java 的特…
暂无图片
编程学习 ·

用类来模拟(栈)操作

用类来模拟(栈)操作 #include <cstdio> #include <iostream> #include <cmath> #include <cstring>using namespace std;template<typename T>class Stack { public:Stack(int size =10){MAX_SIZE =10;tp =new T[size];this->size =0;}~Sta…
暂无图片
编程学习 ·

c#导入百度统计API数据

最近项目中需要增加一些新功能:当前在线人数,总访问量统计,今日访问量,上一年度访问量,找了很多第三方统计工具,最后确定用百度统计,因为项目是vue的,直接引入的时候出现了跨域,发现前端用jsonp解决不了,所以就直接用c#请求再返回给前端了,话不多说,具体操作如下(…
暂无图片
编程学习 ·

IO基础篇:自动关闭接口AutoCloseable

介绍 在没有AutoCloseable之前,我调用资源对象,调用完毕后,必须要关闭,否则可能出现资源耗尽的情况 从名字就可以看出,AutoCloseable是一个可以自动保存资源并且关闭资源对象的接口,那么实现它的类就可以自动关闭资源,那怎样自动关闭呢?我们可以看下面例子: 例子 publ…
暂无图片
编程学习 ·

718 最长重复子数组- 动态规划

题目描述: 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。 说明: 1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] < 100 方法一 动态规…
暂无图片
编程学习 ·

云服务器与物理服务器哪一种更适合企业应用部署?

云服务器与物理服务器哪一种更适合企业应用部署呢? 全球企业早已意识到利用高端技术来提高工作效率并获得竞争优势。从目前的舆论方向来看,部分企业的转型主要围绕着如何将旧系统和应用迁移到“云”。而选用“云”的原因,是因为它的可伸缩性,高效率和高可用性。然而,有些人…
暂无图片
编程学习 ·

Video Summarization with Long Short-Term Memory论文翻译

基于长短期记忆网络的视频摘要 文章目录基于长短期记忆网络的视频摘要Abstract1 introduction2 Related Work3 Approach3.1 Problem Statement3.2 Long Short-Term Memory (LSTM)3.3 vsLSTM for Video Summarization3.4 Enhancing vsLSTM by Modeling Pairwise Repulsiveness3…
暂无图片
编程学习 ·

基于jupyter notebook的python编程-----Win10通过OpenCv-3.4.1进行人脸口罩数据集的模型训练并进行戴口罩识别检测

基于jupyter notebook的python编程-----Win10通过OpenCv-3.4.1进行人脸口罩数据集的模型训练并进行戴口罩识别检测目录一、OpenCv的下载及安装1、OpenCv的下载2、OpenCv的安装3、查看是否具有模型训练环境二、人脸口罩数据集的下载及处理1、人脸口罩数据集下载2、数据集重命名为…
暂无图片
编程学习 ·

MySql简单入门_第四篇(2)_存储

5、存储过程:为以后的使用而保存的一条或多条MySql语句的集合存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(…
暂无图片
编程学习 ·

关于k8s的B2I容器化完整解决方案,使用docker-java将jar包构建镜像并推送至远程镜像仓库,并能在k8s中运行

一站式服务,从入门到入土,嘴对嘴一口口喂您,不要一分钱,全部免费送。 先谢赞,人在美国,刚下飞机,已跟小姨子私奔。 后面会再写一篇k8s调k8sApiService.createDeployments()接口通过已上传的镜像实现自动化部署的教程,这样我们就可以实现使用k8s无限套娃(我部署我自己…
暂无图片
编程学习 ·

那些不常见,但却非常实用的 css 属性

作者:寒水寺一禅https://segmentfault.com/a/11900000228515431、-webkit-line-clamp可以把 块容器 中的内容限制为指定的行数。并且在超过行数后,在最后一行显示"..."这是正常的展示display: -webkit-box; /*值必须为-webkit-box或者-webkit-inline-box*/ -webkit…
暂无图片
编程学习 ·

腾讯疑似回应被骗“辣椒酱不香了”!百度趁机诉苦!

导读:腾讯和老干妈怼怂,百度受伤,我们来看看到底怎么回事? 这一事件从腾讯告老干妈开始,理由是拖欠千万元广告费,故申请冻结老干妈1624万财产,结果老干妈直接发布声明:从未与腾讯公司进行过任何商业合作。 正当我们吃瓜群众等待下文的时候,贵阳警方发了一则通告:3人伪…
暂无图片
编程学习 ·

创新实践记录一

使用UGUI制作开始界面 一、UGUI概述 1.1常用组件 UGUI是从Unity4.6开始被集成到Unity编译器中的官方UI系统,具有灵活,快速和可视化兼容性好的特点。以下为常用的UGUI控件:1.2创建UGUI控件 创建UI控件时,如果没有Canvas和EventSystem系统会自动创建。Canvas画布,是所有UI控…
暂无图片
编程学习 ·

plotnine可视化绘图(二)---geom

一些示例数据1. 点图from plotnine import ggplot, geom_point, aes, stat_smooth, facet_wrap from plotnine.data import mtcarsp=(ggplot(mtcars, aes(wt, mpg, color=factor(gear)))+ geom_point()+ stat_smooth(method=lm)+ facet_wrap(~gear))p.save(filename=png_path,w…
暂无图片
编程学习 ·

【LEETCODE】718.最长重复子数组-动态规划+滑动窗口

题目 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 思路 设数组A长度为n,B长度为m动态规划: 设置动态规划数组dp[n+1][m+1],dp[n][m]=0。 从A[n-1]和B[m-1]开始向前遍历比较,可以得出伪代码: if A[i]==B[j]:dp[i][j]=dp[i+1][j+1]+1; else if …
暂无图片
编程学习 ·

jQuery 的实现原理

(function(window, undefined) {})(window); jQuery 利用 JS 函数作用域的特性,采用立即调用表达式包裹了自身,解决命名空间和变量污染问题 window.jQuery = window.$ = jQuery; 在闭包当中将 jQuery 和 $ 绑定到 window 上,从而将 jQuery 和 $ 暴露为全局变量