面向对象高级类特性

当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。

类属性、类方法的设计思想

·类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。

·如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用

关键字static

·使用范围:

  Java类中,可用static修饰属性、方法、代码块、内部类

·被修饰后的成员具备以下特点:

  随着类的加载而加载

  优先于对象存在

  修饰的成员,被所有对象所共享

  访问权限允许时,可不创建对象,直接被类调用

类变量

·类变量(类属性)由该类的所有势力共享

类方法

·没有对象的实例时,可以用类名.方法名()的形式访问由static标记的类方法。

·在static方法内部只能访问类的static属性,不能访问类的非static属性

·因为不需要实例就可以访问static方法,因此static方法内部不能有this也不能有super

·重载的方法需要同时为static的或者非static的

单例(singleton)设计模式

    设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

class Single{

//private的构造器,不能在类的外部创建该类的对象

private Single() {}

//私有的,只能在类的内部访问

private static Single onlyone = new Single();

//getSingle()为static,不用创建对象即可访问

public static Single getSingle() {

return onlyone;

}

}

理解main方法的语法

  由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接受一个String类型的数组参数,该数组中保存执行java时传递给所运行的类的参数。

类的成员:初始化块

·初始化块(代码块)作用:

  对java对象进行初始化

·一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ),当类被载入时,类属性的声明和静态代码块先后顺序被执行,且只被执行一次。

·static块通常用于初始化static (类)属性

·非静态代码块:没有static修饰的代码块

1.可以有输出语句。

2.可以对类的属性、类的声明进行初始化操作。

3.可以调用静态的变量或方法。

4.若有多个非静态的代码块,那么按照从上到下的顺序依

次执行。

5.每次创建对象的时候,都会执行一次。且先于构造器执行

·静态代码块:用static 修饰的代码块

1.可以有输出语句。

2.可以对类的属性、类的声明进行初始化操作。

3.不可以对非静态的属性初始化。即:不可以调用非静态的属

性和方法。

4.若有多个静态的代码块,那么按照从上到下的顺序依次执行。

5.静态代码块的执行要先于非静态代码块。

6.静态代码块只执行一次

关键字:final

·在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。

  final标记的类不能被继承。提高安全性,提高程序的可读性。

  final标记的方法不能被子类重写。

  final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
·static final: 全局常量

抽象类(abstract class)

·随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。

·用abstract关键字来修饰一个类时,这个类叫做抽象类;

·用abstract来修饰一个方法时,该方法叫做抽象方法。

  抽象方法:只有方法的声明,没有方法的实现。以分号结束

·含有抽象方法的类必须被声明为抽象类。

·抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。

·不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。

接口

·有时必须从几个类中派生出一个子类,继承他们所有的属性和方法。但是,java不支持多重继承。有了接口,就可以得到多重继承的效果。

·接口(interface)是抽象方法和常量值的定义的集合。

·从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

·一个类可以实现多个接口,接口也可以继承其它接口

·接口的特点:

  用interface来定义

  接口中的所有成员变量都默认是由public static final修饰的。

  接口中的所有方法都默认是由public abstract修饰的。

  接口中没有构造器

  接口采用多继承机制。

·实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。否则,仍为抽象类。

·接口的只要用途就是被实现类实现。

·与继承关系类似,接口与实现类之间存在多态性

·如果实现接口的类中没有实现接口中的全部方法,必须将此类定义为抽象类

·接口也可以继承另一个接口,使用extends关键字。

小结:

·通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。

·通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。

·接口主要用来定义规范。解除耦合关系。

类的成员之:内部类

·在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

·Inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。

  Inner class的名字不能与包含它的类名相同;

·Inner class可以使用外部类的私有数据,因为它时外部类的成员,同一个类的成员之间可相互访问。而外部类要访问内部类中的成员需要:内部类.成员或内部类对象.成员。

·分类:成员内部类(static成员内部类和非static成员内部类)

   局部内部类(不谈修饰符)、匿名内部类

内部类特性

·Inner class作为类的成员:

  可以声明为final的

  和外部类不同,Inner class可声明为private或protected

  inner class可以声明为static的,但此时就不能再使用外层类的非static的成员变量了;

·Inner class作为类:

  可以声明为abstract类,因此可以被其他的内部类继承

注意:非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类才可声明static成员

匿名内部类

匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

时间: 2024-09-30 06:59:37

面向对象高级类特性的相关文章

高级类特性----内部类

内部类 在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类. 内部类和外层封装它的类之间存在逻辑上的所属关系 Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称. Inner class的名字不能与包含它的类名相同: Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量. 内部类举例 class A { private int s; public class B { public void mb() { s

高级类特性----接口(intertface)

接 口 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法.但是,Java不支持多重继承.有了接口,就可以得到多重继承的效果. 接口(interface)是抽象方法和常量值的定义的集合. 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现. 接口定义举例 public interface Runner { int id = 1; public void start(); public void run(); public void stop()

高级类特性----static关键字

static 关键字 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用. 我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量. class Circle { private double radius

高级类特性----final关键字

final 关键字 在Java中声明类.属性和方法时,可使用关键字final来修饰. final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次. final标记的类不能被继承.提高安全性,提高程序的可读性. final标记的方法不能被子类重写.增加安全性. final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用.final PI=3.14; 关键字final应用举例 public final class Test { public static int tot

python学习之面向对象高级特性

类属性与实例属性类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.在前面的例子中我们接触到的就是实例属性(对象属性),它不被所有类对象的实例对象所共有,在内存中的副本个数取决于对象个数. 05_类属性鱼实例属性.py import random class Turtle(object): # power是类属性. power = 100 def __init__(self): # x,y:实例属性. self.x = random.randint(0, 10)

Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

概念:                                                                                                                                                     ·        面向过程:根据业务逻辑从上到下写垒代码 ·        函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 ·        面向对象:对函数进行分类和封装,

Python3 面向对象 高级编程

正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.  class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 还可以尝试给实例绑定一个方法: >>> def set_age(self, age): # 定义一个函数作为实例方法 ...

python基础--面向对象高级、异常处理、网络编程

一.面向对象高级 1.接口与归一化设计 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功能. 在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能 归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. 归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的

[7]面向对象高级编程

[7]面向对象高级编程 数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student(object): ... pass ... 然后,尝试给实例绑定一个属性: >