类对象

继承内部类时使用外部类对象.super()调用内部类的构造方法

匿名 (未验证) 提交于 2019-12-03 00:14:01
今天在看《Java编程思想》的时候,看到了一个很特殊的语法,懵逼了半天――一个派生类继承自一个内部类,想要创建这个派生类的对象,首先得创建其父类的对象,也就是这个内部类,而调用内部类的构造方法创建其对象的语法,是 外部类对象.super(); 我们都知道,在Java当中,当我们创建一个类的对象时,在构造方法的第一行会默认的调用父类的构造方法,创建一个父类的对象,并用super关键字引用父类的对象。所以若一个类,它继承了一个内部类,那我们创建这个类的对象前,当然也必须创建一个其父类的对象,也就是这个内部类的对象。 但是,麻烦的是,对于内部类来说,有一个规则,那就是每个内部类的对象, 必定要绑定一个其外部类的对象 ,这就是在内部类中,能够调用外部类方法和操作外部类属性的原因。在我们平时创建内部类对象的时候,首先需要创建一个外部类对象,在使用 外部类对象.new 内部类() 语法来创建内部类对象,这时候内部类对象绑定的就是创建它的外部类对象。 所以,当我们有一个类,它继承自一个内部类的时,我们要创建它的对象,需要满足两个条件: 在创建对象前,要先创建好它的父类对象,也就是它继承的内部类对象; 想要创建内部类对象,你得先有这个内部类的外部类对象,以供他绑定; 于是出现了下面这种让人懵逼的代码: // 外部类 class Outer { // 内部类 class Inner { //

继承

匿名 (未验证) 提交于 2019-12-02 23:57:01
/* 在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式: 1.直接通过子类对象访问成员变量:等号左边是谁,则优先用谁,没有则向上找 2.间接通过成员方法访问成员变量:方法属于谁就优先用谁,没有则向上找 */ 定义子类: public class Zi extends Fu { int numZi = 20 ; int num = 200 ; public void methodZi (){ //因为本类中有num,所以优先用本类的num System . out . println ( num ); } } 定义父类: public class Fu { int numFu = 10 ; int num = 100 ; public void methodFu (){ System . out . println ( num ); //只能用本类中的num,不会找子类 } } 主函数: Fu fu = new Fu (); //创建一个父类的对象 System . out . println ( fu . numFu ); //10,父类对象只能使用父类的内容,没有任何子类内容 System . out . println ( "================" ); Zi zi = new Zi (); System . out . println (

子类对象无法调用protected方法

匿名 (未验证) 提交于 2019-12-02 23:57:01
都知道protected权限包括:同一个包(默认的包访问权限),和子类的访问权限。但对于子类的访问权限可能有些模棱两可。这里先给出结论: 在不同包中的子类的类定义中,可以使用父类的protected方法;但在不同包的子类对象,不可以通过这个子类对象来调用protected方法。 测试代码 在com包中有个用来继承的基类,分别有一个成员函数和静态函数。 package com ; public class base { protected void f ( ) { System . out . println ( "member function" ) ; } protected static void staticF ( ) { System . out . println ( "static function" ) ; } } 测试类在默认包中,下面被注释掉的函数都是无法通过编译的。 import com . base ; public class testP { public static void main ( String [ ] args ) { base b = new base ( ) { //匿名内部类,且此处向上转型 { f ( ) ; } //实例初始化块 } ; //b.f(); //无法通过编译 //b.staticF(); class derived

类的成员

匿名 (未验证) 提交于 2019-12-02 23:49:02
类的成员    类成员   对于类的共有静态属性,类的外部,类的内部,派生类都可以访问到   类的私有静态属性     类的私有静态属性   对象的私有静态属性    如果想设定一些私有的或者是不行让类外面用到,密码加密等设置私有成员     对象私有静态属性   扩展:       私有成员除了在类的内部,当真访问不到了吗      View Code      总结: 对于这些私有成员来说,他们只能在类的内部使用,不能在类的外部,及派生类中使用    类的其他成员:     这里的其他成员主要就是类方法,静态方法,普通方法三种方法在内存中都归属于类,区别在于调用的方式不同       实例方法       定义:一个参数必须是实例对象,该参数名一般约定为self,通过他来传递属性和方法 调用必须是实例对象调用 类方法 :     类方法:用类名直接调用的方法,他会自动的将类名传递给cls     定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法); 调用:实例对象和类对象都可以调用。      View Code    静态方法       静态方法:不依赖与类,也依赖于对象,,他就是一个普通的函数放置于类中,使结构更加清晰与合理 静态方法与类相关,但是不用类里面的属性和方法

接口Iterator

匿名 (未验证) 提交于 2019-12-02 23:43:01
Iterator接口 在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而I terator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。 想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下 获取迭代器的方法: public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。 什么是迭代 迭代: 即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。 Iterator接口的常用方法如下: public E next():返回迭代的下一个元素。 public boolean hasNext():如果仍有元素可以迭代,则返回 true。 代码举例 package demo01; import java.util.ArrayList; import java.util.Collection;

Python基础班每日整理(六)

匿名 (未验证) 提交于 2019-12-02 22:56:40
03_面向对象_day03 类属性和实例属性的概念。 类属性是给类对象(类是一个特殊的对象)中定义的属性,通常用来记录与这个类相关的特征,类属性不会用于记录具体对象的特征。类属性的定义是在初始化方法之外的 实例对象的属性叫做实例属性,在初始化方法内部定义 类属性和实例属性的访问 类属性的访问是类名.类属性 实例属性的访问是实例对象.属性名,也可以在类内部使用self.属性名访问 类方法的定义和使用 br/>@classmethod def 类方法名(cls): pass 需要修饰器@classmethod来标识,第一个参数必须是cls,代表当前类对象本身。可以通过类名.类方法()来调用 静态方法的定义和使用 类方法,静态方法和实例方法的区别 类方法就是针对类对象定义的方法,在类方法内部可以直接访问类属性或者调用其他的 类方法,使用@classmethod标识,需要传递cls参数,代表类对象本身。 单例模式的定义 只有一个实例 new 和 init 方法的调用顺序 先执行 new 方法,会返回为创建对象的引用,然后才会执行 init 方法 了解异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常 try except 捕获异常 else finally在异常中的作用 else是没有发生异常才会执行

java static和final关键字

匿名 (未验证) 提交于 2019-12-02 21:53:52
static 用法 1.static 变量 static变量又称为静态变量,静态变量保存在方法区静态域中,一个类的静态变量被其所有实例共享。 2.static方法 静态方法不与包含它的任何对象关联,即使没有创建对象,也可使用,例: 1 public class StaticTest { 2 3 public static void sayHello(){ 4 System.err.println("Hello"); 5 } 6 7 } 8 9 class Greeting{ 10 11 public static void main(String[] args) { 12 StaticTest.sayHello(); 13 } 14 } View Code 3.static代码块 static代码块在类初次被引用或者实例化时执行且只执行一次,一个类里可以又多个static代码块,会按照顺序执行,例: 1 public class StaticTest { 2 3 static { 4 System.err.println("Wave hands"); 5 } 6 7 public static void sayHello(){ 8 System.err.println("say Hello"); 9 } 10 11 } 12 13 class Greeting{ 14 15

Java基础――继承和多态

匿名 (未验证) 提交于 2019-12-02 21:53:52
  面向对象的编程允许从已经存在的类中定义新的类,这称为继承。   面向过程的范式重点在于方法的设计,而面向对象的范式将数据和方法结合在对象中。面向对象范式的软件设计着重于对象以及对象上的操作。面向对象的方法结合了面向过程范式的强大之处,并且进一步将数据和操作集成在对象中。   继承可以使得你可以定义一个通用的类(即父类),之后扩充该类为一个更加特定的类(即子类)。在Java术语中,如果类C1扩展自另一个类C2,那么就将C1称为次类,将C2称为超类。 超类也称为父类或基类,次类又称为子类、拓展类或派生类。   子类从它的父类中继承可访问的数据域和方法,还可以添加新数据域和新方法。   如果父类中有私有的数据域,这个类被继承后,父类中的私有数据域是不能被子类访问的,唯一能读取和改变它们的方法就是通过它们的get和set方法。   和传统的理解不同,子类并不是父类的一个子集。实际上,一个子类通常比它的父类包含更多的信息和方法。   父类中的私有数据域在该类之外是不可访问的。因此,不能在子类中直接使用。但是,如果父类中定义了公共的访问器/修改器方法,那么可以通过这些公共的访问器/修改器来访问和修改它们。   不是所有的“是一种”关系都该用继承来建模。继承是用来为“是一种”关系建模的。不要仅仅为了重用方法这个原因而盲目地扩展一个类。   某些程序设计语言是允许从几个类派生出一个子类的

java基础知识学习笔记三

匿名 (未验证) 提交于 2019-12-02 21:53:52
面向对象的本质:以类的方式组织代码,以对象的方式组织数据 对象:具体的事务 类:是对对象的抽象 对象和类的关系:特殊到一般,具体到抽象 Java语言除基本类型之外的变量都是引用类型 Java中的对象通过 引用 对其操作 Java中参数的传递是 值传递 内存分析 ջ :自动分配连续空间,先进先出,存放局部变量 堆 :不连续空间,放置new 出来的对象 堆 中的 方法区 :存放类的信息代码,static变量(或者static方法),常量池(字符串常量) 比如:Student s = new Student();通过class loader加载类代码,加载后堆中就有相应的信息(Student类) 垃圾回收机制(GC) 对象的空间分配:使用new 关键字创建对象即可 对象空间的释放:将对象赋值为null即可,垃圾回收器将会负责回收所有“不可达”对象的内存空间 注意点:1.程序员无权调用垃圾回收器 2.程序员可以通过system.gc()通知GC运行,但是java规范上说并不保证立刻运行 3.finalize()方法。是java提供给程序员用来释放对象或资源的方法。但是尽量少用或不用 构造器(构造方法) 构造器用于构造该类的实现,是一种特殊的方法 1. 通过new 调用 2. 构造器虽然有返回值(肯定是本类),但是不能定义返回类型,不能有return 3. 如果我们没有定义构造器

java中的构造函数

匿名 (未验证) 提交于 2019-12-02 21:53:52
本篇博文主要是为新手、对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数的一些看法。希望走在java学习道路上的同行者可以有一个较为清晰的认知和理解。当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习。    1.构造函数的概念   很多java新手谈到构造函数就会犯晕,我们先来看看什么是构造函数。   首先,构造函数是函数的一种特殊形式,特殊在哪里?构造函数中不需要定义返回类型(void是无需返回值的意思,请注意区分两者),且构造函数的名称与所在的类名完全一致,其余的与函数的特性相同,可以带有参数列表,可以存在函数的重载现象。    2.构造函数的格式   了解了构造函数的基本概念,现在来写一个构造函数,希望大家可以了解、记忆其格式,通过实例发现其与普通函数的不同之处。 01  public class Demo{ 02    private int num=0; 03    //无参构造函数 04    Demo() 05    { 06      System.out.println("constractor_run"); 07    } 08    //有参构造函数 09    Demo(int num) 10    { 11