类对象

JavaSE学习08(抽象类和接口)

只愿长相守 提交于 2019-12-02 12:48:12
抽象类 1.抽象类描述 在java中,一个没有方法体的方法应该定义为抽象方法,包含该方法的类必须定义为抽象类。 2.抽象类的特点 抽象类和抽象方法必须用abstract关键字修饰。 public abstract class 类名 {} public abstract void eat(){}; 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。 抽象类不能示例化 抽象类要参照多态的方式,通过子类对象示例化,这叫抽象类多态。 抽象类的子类 要么重写抽象类中的所有抽象方法 要么子类是抽象类。 3.抽象类的成员特点 成员变量: 可以是变量也可以是常量 构造方法: 有构造方法,但是不能示例化,主要用于子类访问父类数据的初始化。 成员方法: 可以有抽象方法,限定子类必须完成某些动作,也可以有非抽象方法,提高代码复用性。 接口 1.接口概述 接口就是一种公共的规范标准,只要符合规范标准,大家都可以使用。 Java中的接口主要体现在 对行为的抽象 2.接口的特点 接口用关键字interface 修饰 public interface 接口名{} 类实现接口用implements表示, public class 类名implements 接口名{} 接口不能示例化 接口可以参照多态的方式,通过实现类对象实力化,这叫接口多态。 多态的形式: 具体类多态(不怎么使用)、抽象类多态、接口多态。

对象模型

眉间皱痕 提交于 2019-12-02 12:29:36
对象模型 ​ 当一个类本身定义了虚函数,或其父类有虚函数时,为了支持多态机制,编译器将为该类添加一个虚函数指针(vptr)。虚函数指针一般都放在对象内存布局的第一个位置上,这是为了保证在多层继承或多重继承的情况下能以最高效率取到虚函数表。当vprt位于对象内存最前面时,对象的地址即为虚函数指针地址。发生动态绑定时,编译器根据虚指针找到相应的虚函数来执行。 ​ 非静态数据成员被配置在每一个类对象之内,静态数据成员、静态和非静态函数被放在类对象之外。虚函数则由下面两个步骤支持: 每个类产生出一堆指向虚函数的指针,放在虚表vptl中。 每个类对象被安插一个虚指针vptr,指向相关的虚表vptl。vptr的设置与重置有每一个类的构造函数、析构函数和拷贝复制运算符自动完成。 来源: https://www.cnblogs.com/vlyf/p/11745382.html

【Java】继承

隐身守侯 提交于 2019-12-02 12:00:21
普通继承 Java不支持多重继承,子类只有一个直接父类 上转型对象 子类对象赋给父类对象 //B是A的子类 A a ; B b = new B ( ) ; a = b ; //a是b的上转型对象 //上转型对象强制转换为子类对象 A a = new B (); b = (B)a 内部类 内部类被看作一个成员 内部类可以访问外嵌类所有内容 外嵌类的方法,成员在内部类依然有效 内部类不可以声明类变量和类方法(可以声明成员变量,成员方法)(因为他是一个成员,所以不能访问) 一般用来改写外部类方法 EX15 china . dalian . g ( ) ; //dalain又是对象又是 匿名类 子类对象创建和类体定义同时进行,即 通常为了重写 new Hello ( ) //hello是一个类 { // 匿名类类体 } 不能声明对象,可以直接创建 匿名对象的引用必须传递匹配参数(多态) //AMethod(A a)AMethod定义为类A的方法 AMethod ( new A ( ) { /*匿名类类体*/ } ) ; EX16 接口匿名类 EX17 来源: https://blog.csdn.net/lsyiii1112/article/details/102689645

Java中的多态&&对象的转型

删除回忆录丶 提交于 2019-12-02 11:17:39
Java中的多态 多态的格式: 父类名称 对象名 = new 子类名称(); 或者 接口名称 对象名 = new 实现类名称(); new什么,就运行什么结果,如果子类中没有,向上查找运行。 访问成员变量的两种方法: 1.直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则向上查找 2.间接通过成员方法访问 注意:子类是不能覆盖重写父类中的成员变量,只能覆盖重写父类中的方法 访问成员方法 看new的是谁,就优选用谁,没有则向上找; 编译看左边,运行看右边。 使用多态的好处; 无论右边new出一个什么样的对象,左边都不需要发生改变。 对象的转型 对象的向上转型 对象的向上转型相当于多态写法 格式:父类名称 对象名 = new 子类名称(); Animal animal = new Cat(); Animal(父类)必须为抽象类 //含义创建一个子类对象,把它当做父类来看待 小范围转向大范围 对象的向下转型 引文:向上转型一定是安全的,没有什么问题,正确的,但是也有一个弊端,对象一旦向上转型为父类,那么就无法调用子类原本的内容。 解决方案向下转型【还原】。 格式: 子类名称 对象名 = (子类名称) 父类对象; 含义: 将父类对像还原成为本来的子类对象 Animal animal = new Cat ( ) ; //本来是猫,向上转型为动物 Cat cat = ( Cat )

javase 第十三讲 继承

北城余情 提交于 2019-12-02 08:44:10
第十三讲 继承 1.当生成子类对象时 java默认会调用父类的构造函数 生成父类对象 然后调用子类构造函数,生成子类对象 [要想生成子类对象,首先需要生成父类对象 比如,没有父亲就没有孩子] 2.关于继承的3点 ①:父类有的,子类也有(属性) ②:父类没有的,子类可以增加 ③:父类有的,子类可以改变 3.继承的注意点 ①:构造方法不能被继承 ②:方法和属性可以被继承 ③:子类的构造方法隐式的调用了父类不带参数的构造方法(1内所说) ④:当父类没有不带参数的构造方法时,子类需要用super来调用父类的构造方法 super需要写在构造方法的第一行 来源: https://blog.csdn.net/benjamin8701/article/details/102744823

Java中的内部类怎么用

 ̄綄美尐妖づ 提交于 2019-12-02 08:17:01
一、为什么需要内部类? java 内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这 样做可以完成所有你直接实现这个接口的功能。 不过你可能要质疑,更改一下方法的不就行了吗? 的确,以此作为设计内部类的理由,实在没有说服力。 真正的原因是这样的, java 中的内部类和接口加在一起,可以的解决常被 C++ 程序员抱怨 java 中存在的一个问题 没有多继承。实际上, C++ 的多继承设计起来很复杂,而 java 通过内部类加上接口,可以很好的实现多继承的效果。二、内部类的基本定义在类的内部可以定义成员变量和方法,而且在类的内部也可以定义另一个类,如果类 Outer 的内部在定义一个类 Inner ,此时 Inner 就成为内部类,而 Outer 则称为外部类。 内部类可以声明为 public 或 private 。当内部类声明为 public 或 private ,对其访问权限于成员变量和成员方法完全相同。代码如下: package com.se.innerclass; class Outer { private String info = " 我爱你中国 "; class

iOS面试题总结

放肆的年华 提交于 2019-12-02 06:14:09
什么是Block? Block是将函数及其执行上下文封装起来的对象。 什么是Block调用? Block调用实质上就是函数调用。 截获变量 对基本数据类型的局部变量截获其值。 对象类型的局部变量连同所有权修饰符一起截获。 局部静态变量以指针形式截获。 全局变量、静态全局变量不截获。 __block修饰符 一般情况下,对被截获变量进行赋值操作需要添加__block修饰符。 需要__block:局部变量:基本数据类型、对象类型 不需要__block:静态局部变量、全局变量、静态局部变量。 赋值 不等于 使用! __block 修饰的变量变成了对象。 __forwarding存在的意义: 不论在任何内存位置,都可以顺利的访问同一个__block变量。 为什么block会产生的循环引用? 当前block对当前对象的某一成员变量截获的话,block会对这一变量有一个强引用,而当前对象又对其当前block有强引用,就产生了一个自循环引用。可以通过__weak对该成员变量进行修饰来消除循环引用。 使用__block来修饰,在MRC下不会循环引用,在ARC下会循环引用,在ARC下要通过断环的方式解除循环引用,但是有个弊端,如果block一直没有调用,这个循环引用是没有办法解除的。 runtime 数据结构 objc_object objc_class isa指针:对象指向类对象,类对象指向元类对象

枚举注解反射整合详解

梦想的初衷 提交于 2019-12-02 04:54:53
一丶枚举 1 ** 2 * 一、枚举类的使用 3 * 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 4 * 2.当需要定义一组常量时,强烈建议使用枚举类 5 * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 6 * 7 * 二、如何定义枚举类 8 * 方式一:jdk5.0之前,自定义枚举类 9 * 方式二:jdk5.0,可以使用enum关键字定义枚举类 10 * 11 * 三、Enum类中的常用方法: 12 * values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。 13 * valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。 14 * toString():返回当前枚举类对象常量的名称 15 * 16 * 四、使用enum关键字定义的枚举类实现接口的情况 17 * 情况一:实现接口,在enum类中实现抽象方法 18 * 情况二:让枚举类的对象分别实现接口中的抽象方法 19 * 20 * @author shkstart 21 * @create 2019 上午 10:17 22 */ 23 public class SeasonTest { 24 ​ 25 public

Java之路---Day09(继承)

五迷三道 提交于 2019-12-02 03:55:37
2019-10-23-22:58:23 目录   1.继承   2. 区分成员变量重名的方法   3. 区分成员方法重名的方法   4. 继承中重写与重载的区别   5. 继承中覆盖重写的注意事项   6. 继承中覆盖重写的设计原则   7. 父子类构造方法的特点   8. Super关键字的三种使用方法   9. This关键字的三种用法   10. Super和This关键字图解 继承   继承: 是 面向对象 软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。   注意:     1.继承是多态的前提,如果没有继承就没有多态     2.在继承关系中,"子类就是一个父类",也就是说,子类可以被当作父类看待   作用:继承主要解决的问题就是 共性抽取   子类特点:     1.子类可以拥有父类的"内容"     2.子类还可以拥有自己专有的内容   Java中继承的三个特点:     1.单继承     2.多级继承     3.多种继承(俗话就是有很多子孙)   继承的格式:     定义父类的格式:(普通类的定义)       public class 父类名称{         语句体       }     定义子类的格式:       public class 子类名称

session的使用方法

元气小坏坏 提交于 2019-12-02 03:33:13
//session的设置HttpSession session = request.getSession(); session.setAttribute("在传输过程中的名称", 需要传输的字段名); 获取session传来的值 HttpSession session = request.getSession(); String phone = (String)session.getAttribute("传输过程中所使用的字段名称");//session可以传输类对象,当需要获取的时候只需要声明一个类对象,然后对session进行强制类型转化即可获取传输的类对象 来源: https://www.cnblogs.com/1gaoyu/p/11729159.html