5:面向对象总结

高级类特性

Staitc:关键字,用于修饰类的成员(属性、方法、内部类)。

例如每一个中国人都共享这个国家的名称,不需要为每个中国人的实例对象中单独分配一个用于代表国家名称的变量。

  1. 在访问允许的情况下,static修饰的成员可以通过类名.的方式访问,在不创建对象实例的情况下也可以
  2. Static修饰的成员叫类成员,为类的所有实例所共享
  3. 在static方法内部只能访问类的static属性,不能访问类的非static属性。但是,非static方法可以访问static成员
  4. 因为不需要实例就可以访问static方法,因此static方法内部不能有this和super
  5. 静态初始化:static修饰的代码块,当类被加载时执行,且被执行一次,作为对静态属性的初始化


设计模式:像经典的棋谱,不同的棋局用不同的棋谱,免去我们自己再去思考和探索

单子设计模板:也就是类的单态设计模式,即采取一定的办法保证软件系统中,对某一个类只能存在一个对象实例。

具体的操作:

  1. 在类的外部不能通过new构造器的方式创建实例。所以把构造器私有化
  2. 因为在类的外部不能创建类的实例,那只能在类的内部创建
  3. 为了让类的外部可以直接使用该实例,使用static修饰(因为static修饰的成员可以不用new的方式,直接通过类名.的方式访问)
  4. 不能在类的外部修改属性:私有化该属性。同时提供共有的get方法来访问

Eg:

private static person p=new person();

Public static person getp(){ return p};



Final:关键字,可以修饰类、属性和方法,表示最终的。

1.Final修饰的属性是最终的属性,所以不能修改,即常量

2.Final修饰的方法是最终的方法,所以不能修改,即不能重写

3.Final修饰的类是最终的类,所以不能扩展,即不能继承

注意:

必须在声明时被初始化,可以在非静态代码块中,或在构造器中来初始化

Eg:

Class a{

Final int age;{age=12;}//静态代码块中初始化

Final string name=“”;//string类型加上引号

Final int sex;

Aa(){sex=1;}}//在构造器中初始化



Abstract:关键字,用于修饰类和方法。

  1. abstract修饰的方法:没有方法体,只有方法的声明
  2. Abstract修饰的类:抽象类,不能被实例化

注意:

1.有抽象方法的类一定是抽象类,但抽象类中可以没有抽象方法

2.不能用abstract修饰私有方法、构造方法、静态方法

用法:

1)抽象类不可实例化

2)具体的类通过继承抽象类的方式,创建子类的实例

3)当子类继承抽象类以后,要重写抽象类的抽象方法

4)子类必须重写抽象类及其父类的所有的抽象方法,方可实例化。如果不重写,输出的则是抽象类中默认的方法。抽象类继承抽象类可以不用写抽象方法,已经继承了。

public class TestAbstract {

public static void main(String[] args) {

Person p1 = new Student();//多态

p1.talk();

p1.work();

应用场景:

  1. 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法(例如圆和矩形都有面积的计算公式,父类可以定义一个空的面积的方法,在比较俩个图形面积大小的时候)
  2. 从多个具有相同特性的类中抽象出一个类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性


接口:有时候必须从几个类的中派生出一个子类,继承他们所以的属性和方法。但是Java中不支持多重继承,即只能有一个父类。有了接口,就可以实现多继承。

接口定义了某一些类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

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

  1. 使用interface声明
  2. 接口是抽象方法和常量的集合,不能再有其他成分
  3. 接口方法中默认修饰为:public abatrac
  4. 接口中常量的默认修饰为:public static final

常量的命名规范:多个单词组成,每个字母需要大写,且每个使用_连接。

  1. 实现接口使用implements关键字
  2. 一个类可以实现多个接口,接口可以继承,或者说就是为了继承

修饰符 class 类名 extends 父类implements 接口1,接口2。。。

{类体部分 ,如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法}

注意:

  1. 不能用private和protect修饰接口,通常用public
  2. 抽象类可以定义构造器!---->接口是没有构造器的!


总结:

staitc是为了共享属性、方法和内部类,可以不用实例化通过类名.的方式访问。

单子模式是只能有一个对象实例,但是不能在类外面实例化,只能在内部实例化,所以先私有化构造器,再私有化属性,并提供get方法。前边都用static,实例也要用stait,比如

private static person p=new person();

Abstract修饰的方法抽象方法是没有方法体的,修饰的类抽象类是不能实例化的。抽象类是知道有哪些方法,但具体如何实现交给子类。

接口是只有抽象方法和常量的抽象类,它可以实现多继承,它不关心细节,只需提供必须有的东西。



内部类:在类的内部定义的类

  1. 在类的外部如何访问内部类对象?

①对于非静态内部类:必须先创建外部类对象,然后再创建内部类对象

OuterClass oc=new OutClass();

InnerClass ic=oc.new InnerClss();

ic.test();

②静态内部类:内部使用static来修饰,所以创建该类的对象可以没有外部类对象

StaticInnerClass sic=new Outclass.StaticInnerClass;

2.内部类通过以下方式访问外部类的成员变量

Private int i=1;//外部类的成员变量

Class innerclass{

Private int i=2;

Private string innername=”def”

Public void tese(){

Int i=3;

Sysout(i);//3

Sysout(this.i);//2

Sysout(outclass.this.i);

//1     如果外部成员变量是int a=1,这里直接写就行

Sysout(outername);

Sysout(innername);

//访问方法时正常访问即可

}

}

注意:静态内部类中的方法不能访问外部内的非静态成员

  1. 匿名内部类

在类的内部直接创建一个接口的实现类对象

Eg:

New IplayGame(){

Public void playGame(){

Sysout(用匿名内部类实现接口)}

}.playGame();

也可以在类的内部这样写:

IplayGame ip= new iplayGame(){

Public void playGame(){

Sysout(“使用匿名内部类实现接口”)}};

Ip.playGame();//通过这样访问这个方法

来自为知笔记(Wiz)

时间: 2024-07-29 10:25:40

5:面向对象总结的相关文章

python学习 面向对象封装

from collectoins import namedtuplePoint=namedtuple('point',['x','y'])t1=Point(1,2)print(t1.x)print(t1.y)没有方法的类属性不会发生变化    定义简单 不能改变面向对象封装私有属性!!!私有方法!!!用装饰器描述的几个方法@property !!!@classmethod!!@staticmethod! 封装:class Teacher:     def __init__(self,name,p

python—面向对象的封装

封装 私有属性 class Teacher: __identifier = 'Teacher' #私有静态属性 def __init__(self,name,pwd) self.name = name self.__pwd = pwd #私有属性 内部使用,外部不能使用 def pwd(self): print(self.__pwd) alex = Teacher('alex','3714') alex.pwd() class Teacher: __identifier = 'Teacher'

python学习_day26_面向对象之封装

1.私有属性 (1)动态属性 在python中用双下划线开头的方式将属性隐藏起来.类中所有双下划线开头的名称,如__x都会自动变形成:_类名__x的形式.这种自动变形的特点是: a.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果.b.这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的.c.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆

python面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类. 继承:即一个派生类(de

php学习笔记 面向对象中[接口]与[多态性]的应用

代码如下: <?php /* 接口技术 * * 接口是一种特殊的抽象类,抽象类又是一种特殊的类 * * 接口和抽象类是一样的作用 * * 因为在PHP是单继承的,如果使用抽象类,子类实现抽象类就不能再去继承其他的类了 * * 如果既想实现一些规范,又想继承其他类.就要使用接口. * * 接口和抽象类的对比 * * 1.作用相同,都不能创建对象,都需要子类去实现 * * 2.接口的声明和抽象类不一样 * * 3.接口被实现方式不一样 * * 4.接口中的所有方法必须是抽象方法,只能声明抽象方法(不

php面向对象

面向对象 什么是面向对象? 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程 序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性.灵活性和扩展性.为了实现整体 运算,每个对象都能够接收信息.处理数据和向其它对象发送信息. 什么是面向对象编程呢? 把每个独立的功能模块抽象成类形成 对象,由多个对象组成这个系统,这些对象之间都能够接收信息.处理数据和向其它对象

面向对象注意事项

在面向对象中,有实例变量和类变量,实例变量为类对象的实例成员,而类变量不仅类可以直接调用,而且类的对象也可以调用.类对象可以对实例变量进行添加.修改.删除操作等... 下面就用个示例来做参考: #!/usr/bin/env python # -*- coding:utf-8 -*- class PersonInfo(object): commity_data = 123 def __init__(self,name,age): self.name = name self.age = age de

java面向对象:面向对象的思想和概述

1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 开发,设计,特征 面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情. 面向对象设计 其实就是在管理和维护对象之间的关系. 面向对象特征 封装(encapsulation) 继承(inheritance) 多态(polymorphism

6 面向对象之类和对象

1 面向对象和面向过程的区别 两者都是软件开发思想,先有面向过程,后有面向对象.在大型项目中,针对面向过程的不足推出了面向对象开发思想. 区别: 1)编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类.属性及其方法,然后通过实例化类.执行方法来完成功能. 2)封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能. 3)面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显. 2 类和对象 对象:客观存在的实体(一个具体的

简说面向过程与面向对象

昨天白天,因为在室外活动,无事可做,所以我思考了一天,在想怎么才能比较清晰的向人解释这两个概念.所以我对这两个概念的字面意思做了一下详细的解释.没想到,这可能真的会帮助我们非常简单的理解这两个概念. 面向:从字面上理解面向,就是我们的脸对着的地方,引申为我们能看到. 过程: 过程是事物从开始,到发展,到结束的整个经历 那么面向过程就是:我们能看到, 一个事物从 开始->发展->结束. 这对于我们写程序的人来说,可能会有感触,因为一开始我们写程序时.都是按照事件的发展.去安排计算机,一步一步的做