说说面向对象

面向对象 封装的原则    要求使对象之外的部分不能随意存取对象的内部数据,从而有效避免了错误对它的“交叉感染”,使软件错误能局部化,降低排错难度

继承

  所有的类都继承自java.lang.Object,一些常用的方法:

    equals():比较两个对象引用时否相同。

    getClass():返回对象运行时所对应的类的表示,从而得到相应的信息

    toString():返回对象字符串表示

    finalize():用于在垃圾收集前清除对象

    notify(), notifyall(), wait(): 用于多线程处理中的同步

  子类(subclass)对父类(superclass,超类)的继承

  子类不能继承父类中访问权限为private的成员变量和方法。

  子类可以重写父类的方法,及命名与父类同名的成员变量。

  Java不支持多重继承

  创建子类

    class SubClass extends SuperClass {

      ...

    }

  成员的隐藏和方法的重写

    子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为变为自身的状态和行为。

    

多态性   子类继承父类后,同一个方法有不同的表现

  体现在两个方面:方法重载实现的静态多态性(编译时多态),方法重写实现的动态多态性(运行时多态)

    重写方法的调用原则:子类重写父类的方法,调用子类方法;反之,调用父类的方法

  一个对象可以引用子类的实例来调用子类的方法

  eg: B继承A,A的对象a引用B的实例,调用B的方法callme()


 1 import java.io.*;
2 class A {
3 void callme() {
4 System.out.println("Inside A‘s callme()) method");
5 }
6 }
7
8 class B extends A {
9 void callme() {
10 System.out.println("Inside B‘s callme() method");
11 }
12 }
13
14 public class Dispatch {
15 public static void main(String args[]) {
16 A a = new B(); // 引用子类的实例17 a.callme();
18 }
19 }

类的实现   类声明     [public][abstract|final] class className [extends
superclassName] [implements interfaceNameList] {}       修饰符public, abstract,
final说明类的属性       className为类的属性       superclassName为父类的名字
      interfaceNameList为类所实现的接口列表

  类体     class className     {       [public | protected | private] [static]
[final] [transient] [volatile] type variableName; // 成员变量       [public |
protected | private] [static] [final | abstract] [native] [synchronized]
returnType methodName(         [paramList]) [throws exceptionList] {statements};
//成员方法     }

  成员变量     [public | protected | private] [static] [final] [transient]
[volatile] type variableName; // 成员变量       static: 静态变量(类变量)       final: 常量
      transient:暂时性变量,用于对象存档       volatile:共享变量,用于并发线程的共享

  成员方法     [public | protected | private] [static] [final | abstract]
[native] [synchronized] returnType methodName(     [paramList]) [throws
exceptionList] {statements}; //成员方法       static: 类方法,可通过类名直接调用       abstract:
抽象方法,没有方法体       final:方法不能被重写       native:集成其他语言的代码
      synchronized:控制多个并发线程的访问

  

  Java类中的限定词:

    private:类中限定为private的成员,只能被这个类本身访问。如果构造方法为private,则其他类不能实例化该类。

    default:不加任何访问权限,可以被这个类本身和同一个包中的类访问。

    protected:类中限定为protected的成员,可以被这个类本身、它的子类和同一个包中的其他类访问。

    public:类中被限定为public的成员,可以被所有类访问。

    

  final关键字可以修饰类、类的成员变量和成员方法,但作用不同

    修饰成员变量:称为常量,须给出初始值

    修饰成员方法:该方法不能被子类重写

    修饰类:类不能被继承

  

    super: 访问父类的成员 

      访问父类被隐藏的成员变量,如super.variable;

      调用父类中被重写的方法,如super.Method([paramlist]);

      调用父类的构造函数,如super([paramlist]);

eg:


 1 import java.io.*;  2 class SuperClass {  3     int x;  4   5     SuperClass() {  6         x = 3;  7         System.out.println("in SuperClass: x = " + x);  8     }  9  10     void doSomething() { 11         System.out.println("in SuperClass.doSomething()"); 12     } 13 } 14  15 class SubClass extends SuperClass { 16     int x; 17  18     SubClass() { 19         super(); 20         x = 5; 21         System.out.println("in SubClass: x = " + x); 22     } 23  24     void doSomething() { 25         super.doSomething(); 26         System.out.println("in SubClass.doSomething()"); 27         System.out.println("Super.x = " + super.x + "sub.x = " + x); 28     } 29 } 30  31 public class Inhereritance { 32  33     public static void main(String chars[]) { 34         SubClass sc = new SubClass(); 35         sc.doSomething(); 36     } 37 }

     

    

  简单数据:值类型   复合数据:引用类型


 1 import java.io.*;
2 public class PassTest {
3 float ptValue;
4
5 public static void main(String args[]) {
6 int val;
7 PassTest pt = new PassTest();
8 val = 11;
9 System.out.println("Original int Value is:"+val);
10 pt.changeInt(val);
11 System.out.println("Int Value after Change is:"+val);
12 pt.ptValue = 101f;
13 System.out.println("Original ptValue is:"+pt.ptValue);
14 pt.changeObjectValue(pt); // 引用类型的参数15 System.out.println("ptValue after change is:"+pt.ptValue);
16
17 }
18
19 public void changeInt(int value) {
20 value = 55;
21 }
22
23 public void changeObjectValue(PassTest ref) {
24 ref.ptValue = 99f;
25 }
26 }

简单数据类型作为参数传递时,为值传递;复合数据类型作为参数传递时,为地址传递

  方法体     方法的实现。方法体中局部变量若与成员变量同名,局部变量将屏蔽成员变量。


 1 import java.io.*;  2 class Variable {  3     int x = 0, y = 0, z = 0; // 类的成员变量 4   5     void init(int x, int y) {  6         this.x = x;  7         this.y = y;  8         int z = 5;  // 局部变量 9         System.out.println("** in init**"); 10         System.out.println("x = " + x + "y = " + y + "z = " + z); 11     } 12 } 13  14 public class VariableTest { 15     public static void main(String args[]) { 16         Variable v = new Variable(); 17         System.out.println("** before init **"); 18         System.out.println("x = " + v.x + "y = " + v.y + "z = " + v.z); 19         v.init(20, 30); 20         System.out.println("** after init **"); 21         System.out.println("x = " + v.x + "y = " + v.y + "z = " + v.z); 22     } 23 }

  方法重载

    指多个方法享有相同的名字。这些方法的参数必须不同。且参数类型区分度要足够:如不能使同一简单类型的数据:int与long


 1 import java.io.*;
2
3 class MethodOverloading {
4 void receive(int i) {
5 System.out.println("Receive in data");
6 System.out.println("i = " + i);
7 }
8
9 void receive(int x, int y) {
10 System.out.println("Receive two in datas");
11 System.out.println("x = " + x + "y = " + y);
12 }
13 }
14
15 public class MethodOverloadingTest {
16 public static void main(String args[]) {
17 MethodOverloading mo = new MethodOverloading();
18 mo.receive(1);
19 mo.receive(2, 3);
20 }
21 }

  构造方法

    一个特殊的方法。每个类都有构造方法,用来初始化该类的一个对象。

    构造方法具有和类名相同的名称,不返回任何数据类型。

    重载经常用于构造方法。

    构造方法只能由new运算符调用

  抽象类和抽象方法:

    用abstract关键字修饰类:抽象类

    用abstract关键字修饰方法:抽象方法

    抽象类必须被继承,抽象方法必须被重写

    抽象方法只需声明,无需实现

    抽象类不能被实例化,抽象类不一定要包含抽象方法

    若类中包含抽象方法,给类必须被定义为抽象类

  接口

    接口是抽象类的一种,只包含常量和方法的定义,没有变量和方法的实现,且其方法都是抽象方法。

    用处体现在:

      通过接口,实现不相关类的相同行为

      通过接口,指明多个类需要实现的方法

      通过接口,了解对象的交互界面,无需了解对象所对应的类

    接口的定义:

      接口声明:

        [public] interface interfaceName[extends listOfSuperInterface]
{...}

      方法体定义:

        returnType methodName([paramlist]);

    接口的实现:

      在类的声明中用implements子句来表示一个类使用某个接口

      类体中可以使用接口中定义的常量,必须实现接口中定义的所有方法

      一个类可以实现多个接口,在implements中用逗号隔开

    接口类型的使用:

      接口作为一种引用类型来使用

      任何实现该接口的类的实例,都可以存储在该接口类型的变量中,通过这些实例,访问该类接口中的方法。

说说面向对象,布布扣,bubuko.com

时间: 2024-10-11 20:57:19

说说面向对象的相关文章

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 类和对象 对象:客观存在的实体(一个具体的

简说面向过程与面向对象

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