![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面向对象
封装,继承,多态
pangpd
Just a boy caught up in dreams and fantasies !
展开
-
【Java】抽象类为什么不能被实例化?
1. 前言抽象类基础:请查看博客:抽象方法和抽象类详解2. 抽象类为什么不能被实例化?答案:Java语言的规定!首先,抽象类是存在构造器的,在思考这个问题之前,我大概有一种这样的思维:既然有构造器,说明这个类可以被实例化(错误)。知道遇到这个问题后,我才意识到我的这个想法是有多少错误。实例化和有没有构造方法没有关系,构造方法只是初始化对象的,new关键字向JVM申请内存来创建对象的。举个例子:苹果是水果的一个实例。但是不存在水果这样的实例!1.第一点:回归问题最初, 我们为什么要实例化?我们转载 2020-10-27 20:49:39 · 1949 阅读 · 0 评论 -
【Java】枚举类型和底层分析,枚举的单例模式
一. 枚举(enumeration)的引入和模拟需求: 定义一个Employee(员工),使用一个变量restday来表示他哪一天休息(一周的哪一天)。class Employee{ private int restday; public void setRestday(int restday) { this.restday = restday; } public int getRestday() { return restday; }}class Enumeratio原创 2020-08-02 11:54:42 · 266 阅读 · 0 评论 -
【Java】内部类(实例,静态,局部,匿名)
一. 内部类定义内部类: 所谓内部类就是在一个类内部进行其他类结构的嵌套操作。因此,在一个类中除了可以定义字段,方法以外,还可以定义类1.1 为什么要使用内部类:(1)增强封装,把内部类隐藏在外部类之内,不许其他类访问内部类。(2)内部类能提高代码的可读性和可维护性,把小型类嵌入到外部类中结构上代码更靠近。(3)内部类可以直接访问外部类的成员。二. 四种内部类根据使用不同的修饰符或者定位位置的不同,可以将内部类分为四种:(1)实例内部类:内部类没有static修饰;(2)静态内部类:内部原创 2020-08-01 22:30:51 · 156 阅读 · 0 评论 -
【Java】接口—面向接口编程;(接口和抽象类的区别!)
一. 接口的定义专业来说,多个抽象类的的抽象就是接口。通俗地讲,在Java中最小的程序单元就是类,接口其实是一个特殊的类。Java中的接口表示规,用于定义一组抽象方法,表示某一类事物必须具备的功能,要求实现类必须来实现该接口并提供方法实现。二. 语法定义类语法: [public] class 类名{}定义接口语法: [public] interface 接口名{}; //(在这里还没有考虑接口的父接口等等).接口起名问题:表示具有某些能力的,有人习惯以able/handler结尾。原创 2020-07-30 15:23:27 · 331 阅读 · 0 评论 -
【Java】模板方法设计模式详解
一. 需求:统计不同操作的耗时时间模板操作首先看这样一段代码:class StringOperate{ public Long stringOperate(){ Long currentTime = System.currentTimeMillis(); //当前系统的时间(毫秒) String str = ""; for (int i=0 ; i<10000;i++ ) { str +=i; } Long endTime = System.currentTi原创 2020-07-29 17:26:31 · 1695 阅读 · 0 评论 -
【Java】抽象方法和抽象类详解
一. 引出抽象方法案例:求圆(circle),矩形(rectangle),三角形(triangle)的面积class Graph{ public Double getArea(){ return 0.0; // 默认返回0.0 }}class Circle extends Graph{ private Double r ;//半径 Circle(Double r){ this.r = r; } public Double getArea(){ return Mat原创 2020-07-29 14:54:45 · 490 阅读 · 0 评论 -
【Java】单例设计模式与工具类设计
什么是设计模式设计模式(Design pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,毫无疑问,设计模式于己于人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦的结构一样。单例设计模式单例设计模式是最常用,也是最简单的设计模式。目的:保证某一个在整个应用中某一个类有且只有一个实例(一个类在堆内存中只存在一个对象),即所有指向该类型的实例的引用都指向同一块原创 2020-07-27 13:19:57 · 866 阅读 · 0 评论 -
【Java】final 修饰符(final修饰的类,方法和变量)
为什么需要使用final修饰符继承关系最大的弊端是破坏封装。子类能访问父类的实现细节,而且可以通过方法覆盖的形式修改实现细节;多个修饰符之间是没有先后关系的.:public static final ; //推荐用这种public final static ;final static punlic;final本身的含义:最终的,不可改变的。可以修饰非抽象类,非抽象方法和变量。注意:构造器不能使用final修饰,因为构造器不能被继承,肯定是最终的。1. final修饰的类:表示最终的类,该原创 2020-07-27 12:17:19 · 2999 阅读 · 0 评论 -
【Java】存在代码块时代码的执行顺序(以一道面试题为例)
面试题:不需要运行代码,分析下列代码的执行顺序,然并卵的问题,只在研究学术问题问题中研究,在实际开发中用处不大。public class App{ private static App a = new App(); //所有非static修饰的字段初始化其实都是在构造器中进行做初始化的 // 以下该行代码相当于在static代码块中定义 private SubClass t = new SubClass(); static { System.out.println(3); }原创 2020-07-26 22:24:14 · 176 阅读 · 0 评论 -
【Java】三种代码块语句
什么是代码块在类或方法中,直接使用"{}"括起来的一段代码,表示一块代码区域。代码块里变量属于局部变量,只在自己所在的区域前后的{}内有效。代码块的三种形式根据代码块定义的位置不同,我们有分为三种形式:(1) 局部代码块:直接定义在方法内部的代码块;一般的,我们是不会直接使用代码块的,只不过我们会结合if,while,for,try等关键字联合,表示一块代码区域。(2)初始化代码块(构造代码块):直接定义在类中每次创建对象的时候都会执行初始化代码块。class CodeBlockDemo原创 2020-07-26 21:31:59 · 313 阅读 · 0 评论 -
【Java】字段不存在多态特征
class SuperClass{ static String name = "SuperClass"; public void doWork(){ System.out.println("SuperClass.doWork"); }}class SubClass extends SuperClass{ static String name = "SubClass"; public void doWork(){ System.out.println("SubClass.doWor原创 2020-07-26 17:06:40 · 130 阅读 · 0 评论 -
【Java】组合关系
回顾继承关系:子类可以继承到父类中部分成员,那么此时子类是可以修改到父类信息的。继承关系破坏封装,为了复用代码,可能会让子类具有了不该具有的功能。解决复用问题,不一定非要使用继承关系,也可以用 “包含关系”。如果继承是“is a”的关系,那么包含关系就是一种“has a”的关系。举例:方式1: 找一个富豪干爹(继承关系)class ArrayUtil{ public static void selectSort(int[] nums){ for(int i = 0; i <原创 2020-07-26 16:46:00 · 445 阅读 · 0 评论 -
【Java】引用类型转换和instanceof运算符
基本数据类型转换自动类型转换:把小类型的数组赋给大类型的变量(此时的大和小表示容量范围)byte b =12 ; //byte是1个字节int i = b; // int 是4个字节强制类型转换:把大类型的数据赋给小类型的变量。int i =12; // int是4个字节short s = (short) i // short 是2个字节引用类型的转换引用类型的大和小,指的是父类和子类的关系自动类型转换:把子类对象赋值给父类变量(多态)Animal a = new Dog();/原创 2020-07-26 13:37:03 · 95 阅读 · 0 评论 -
【Java】多态的理解与使用
理解多态思想学了继承关系,我们知道继承关系是一种”is A”的关系,也就说子类是父类的一种特殊情况;问题: 子类的对象是动物?既然子类是一种特殊的父类,那么我们可不可以认为狗对象/猫对象就是动物类型的对象.Class Animal{};//动物类 Class Dog extends Animal{};//狗类 Class Cat extends Animal{};//猫类Animal a = new Dog();Animal b = new Cat();当编译类型和运行类型不同的时候,原创 2020-07-26 11:33:52 · 413 阅读 · 0 评论 -
【Java】Object类和常用方法
Object类是Java语言的根类,要么是一个直接父类,要么就是一个类的简介父类。class ABC{}其实等价于 class ABC extends Object{}所有对象(包括数组)都实现这个类的方法,这句话如何理解?为什么Object是所有类的根类,到底什么是Object?Object本身是值对象的意思,我们发现所有的对象都是具有一些共同的行为,所以我们抽象出一个类:Object,表示对象类,其他都会继承于Object类,也就拥有Object类中的方法。引用数据类型:类/接口/数组,引用类原创 2020-07-25 22:10:54 · 117 阅读 · 0 评论 -
【Java】super关键字的理解与使用(包含隐藏想象的理解)
super关键字的引用需求:在子类中某一个方法中,去调用父类被覆盖的方法此时,就需要使用到super关键字什么是super:this:当前对象,谁调用this所在的方法,this就是哪一个对象;super:当前对象的父类对象;class Bird{ public void fly(){ System.out.println("fly"); }}class Penguin extends Bird{ public void fly(){ System.out.printl原创 2020-07-25 18:42:05 · 334 阅读 · 0 评论 -
【Java】继承关系与方法覆盖
什么是继承关系?基于某个父类对象定义的加以拓展,从而产生新的子类定义,子类可以继承父类原来的某些定义,也可以增加原来父类没有的定义,或者覆写父类中的某些特性。从面向对象的角度上来说,继承是一种从一般到特殊的关系,是一种“ is a ”的关系,即子类是父类的拓展,是一种特殊的父类,比如狗是动物的一种特殊情况,狗属于动物。在Java语言当中,存在多个类的时候,我们使用“extends”关键字来表示子类和父类之间的关系。在Java语言当中,类和类之间的继承关系,只允许单继承,不允许多继承,也就是说一个类A原创 2020-07-25 14:23:17 · 1032 阅读 · 0 评论 -
【Java】练习setter方式和构造器初始化对象:判断点和圆的关系
需求:判断点和圆的关系:判断一个点是在圆上,圆外,还是在圆内名词解释:一般的,名词要么是对象,要么是状态;// 判断一个点和圆的关系:/** 如果点在圆外,点到圆心的距离大于半径 如果点在圆上,点到圆心的距离等于半径 如果点在圆内,点到圆心的距离小于半径 **/class Circle{ private double radius; //圆半径 private double x; //x轴坐标 private double y; //y轴坐标 Circle(){} Circl原创 2020-07-24 23:01:53 · 143 阅读 · 0 评论 -
【Java】构造器和setter方法选用
创建对象并给对象设置初始值的方式有两种:(1)通过无参数构造器创建出一个对象,再通过对象调用相应的setter方法,示例代代码如下;class Person{ private String name; private int age; public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){原创 2020-07-24 22:13:18 · 688 阅读 · 0 评论 -
【Java】this关键字理解与使用
引出this关键字在Java中,this表示当前对象;this主要存在于两个位置:1. 构造器中: 就表示当前创建的对象,证明代码1如下:class Person{ private String name; private int age; Person(){ System.out.println(this); }}class ThisDemo2 { public static void main(String[] args) { Person p = new Pers原创 2020-07-24 21:53:56 · 213 阅读 · 0 评论 -
【Java】JavaBean规范(属性和字段不是同一概念)
JavaBean规范:JavaBean是一种JAVA语言写成的可重用组件(类) .必须遵循一定的规范:(1):类必须使用public修饰.(2):必须保证有公共无参数构造器.即使手动提供了带参数的构造器,也得提供无参数构造器…(3):包含了属性的操作手段(给属性赋值,获取属性值).分类(1) 复杂:UI, 比如Button, Panel, Window类.(2) 简单:domain dao, service组件, 封装数据, 操作数据库, 逻辑运算等.(封装有字段, 并提供getter/s原创 2020-07-24 20:05:51 · 379 阅读 · 0 评论 -
【Java】理解封装思想与权限修饰符
前言首先看一段代码:class Person{ String name; int age;}class EncapsulationDemo{ public static void main(String[] args) { Person p = new Person(); p.name = "Liming"; p.age = -17; // 年龄设置成负值,不符合实际! }}创建一个Person对象时,年龄设置为负数,这是不符合实际情况的!在看:这就引出了原创 2020-07-24 15:39:37 · 102 阅读 · 0 评论 -
【Java】变量的分类(作用域,初始值,生命周期)
1. 变量的分类变量根据在类中定义位置的不同,可以分为两大类:成员变量:全局变量/字段(Field),不要称之为属性(错误),直接定义在类中,方法外面;(1)类成员变量:使用static修饰符;(2)实例成员变量:没有使用static修饰符;局部变量:变量除了成员变量,其他都是局部变量;(1)方法内部的变量;(2)方法的形参;(3)代码中的变量,一对{};Class ABC{ String info = null; //成员变量 public void dowork(String n原创 2020-07-24 10:47:43 · 1028 阅读 · 0 评论 -
【Java】static修饰符的特点与使用
前言对象都有name和age两个状态;也就是说不同对象的name和age是不同的;但是在生活中有些东西不是属于某一个具体对象的,而是属于整个事务的类型。比如:全世界人的总数,人的毁灭行为。————————————————————————状态和行为应该又对象和类型之分。有的状态和行为应该属于对象,状态和行为可以不一样;有的状态和行为应该属于类型,不属于对象。问题:如何表示人类毁灭这个行为(destory)那么就要用到static修饰符————————————————————————sta原创 2020-07-23 20:36:02 · 575 阅读 · 0 评论 -
【Java】构造器相关知识
构造器概念当我们创建一个学生对象时,代码如下:Student s = new Student();这个代码特别像:在调用一个名为Student的无参方法;我们把这种特殊的方法称为构造方法 / 构造器 / 构造子(constructor)但是我们发现在Student类中找不到该构造方法,但是编译过程中又没有报错。这是因为,编译器在编译源文件的时候,会创建一个缺省的构造器;构造器作用(1)创建对象,必须和new一起使用;(2)完成对象的初始化操作;构造器特点(1)构造器的名称要与当前所原创 2020-07-23 11:48:39 · 164 阅读 · 0 评论 -
【Java】对象的实例化与内存分析
对象的创建// 学生类class Student{ String name; int age; void learning(){ System.out.println("learning...."); }}class ClassDemo { public static void main(String[] args) { Student s = new Student(); //实例化对象 s.name = "小明"; s.age = 12; Syste原创 2020-07-23 10:46:03 · 285 阅读 · 0 评论 -
【Java】面向过程与面向对象
面向过程采用置顶而下的设计方式,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,与每一个子模块有细分为更小的子模块。如此类推,知道将模块细分为一个个函数。存在的问题:(1)设计不够直观,与人类的习惯思维不一致;(2)系统软件适应性差,可扩展性差,维护性低;(2)随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。面向对象一种基于面向过程的新的编程思想,顾名思义是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。那么,具备某些功能的实体,就称之为对原创 2020-07-23 08:58:57 · 94 阅读 · 0 评论