方法是动态绑定的,属性是静态绑定的



package com.test;

/**

* @FileName    : B.java

* @Description : 复习下:帮助你理解方法是动态绑定,属性是静态绑定的

* @Copyright   : PowerData Software Co.,Ltd.Rights Reserved

* @Company     : XXXXX

* @author      : 星辰

* @version     : 1.0

* Create Date  : 2014-9-5 下午04:57:24

*

*/

class AA {

protected int a = 2;

protected static int b = 2;

static void method1() {

System.out.println("A.method1()");

}

void method2() {

System.out.println("A.method2()");

}

}

public class B extends AA {

protected int a = 3;

protected static int b = 3;

// will not override A.method1()

static void method1() {

System.out.println("B.method1()");

}

// will override the A. method2()

void method2() {

System.out.println("B.method2()");

}

public static void main(String[] args) {

AA a = new B();

System.out.println("b:" + a.b);//2

System.out.println("a:" + a.a);//2

a.method1();//

a.method2();

}

// //因为A里面的method1是static,编译时就静态绑定了,所以输出 A.method1搜索() a.method2();

// //而method2()不是static方法,a是由B

// new出来的,执行的时候会执行new它的那个类的method2()方法,所以输出B.method2(),这是java的多态性 }}

}

================结果:

b:2

a:2

A.method1()

B.method2()

时间: 2024-10-21 15:59:08

方法是动态绑定的,属性是静态绑定的的相关文章

CLR via C#深解笔记四 - 方法、参数、属性

实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, 首先为实例的数据字段分配内存 #2, 然后初始化对象的附加字段(类型对象指针和同步块索引) #3, 最后调用类型的实例构造器来设置对象的初始状态 构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零.构造器没有显示重写的所有字段保证都有一个0或null值.和其它方法不同,实

Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 16. 在公共类中使用访问方法而不是公共属性 有时候,你可能会试图写一些退化的类(degenerate classes),除了集中实例属性之外别无用处: // Degene

类的各种自带方法,静态方法,属性方法,类方法等

#coding=utf-8 class Dog(object): ''' 类的描述 ''' def __init__(self,name): self.name = name self.__food = None @staticmethod #实际上跟类没什么关系,单纯的函数,但是必须通过类名来调用 def eat(food): print ('%s is eating %s'%('xiaohuang',food)) @classmethod #类方法,只能访问类变量,不能访问实例变量 def

python中属性和方法的动态绑定

# 定义一个类 class Student(object):     pass # 实例化一个对象     s = Student() # 给这个对象绑定一个属性name s.name = 'John' print(s.name) John # 定义一个方法 def set_age(self, age):     self.age = age # 导入模块     from types import MethodType #给s这个对象绑定一个set_age的方法 s.set_age = Met

java反射调用私有方法和修改私有属性

//调用私有方法package com.java.test; public class PrivateMethod { private String sayHello(String name) { return "hello "+name; } } 测试: package com.java.test; import java.lang.reflect.Method; public class PrivateMethodTest { public static void main(Str

我自己的方法、组件、属性、变量、常量、数据库常用操作命名方法。

1.方法命名 a.如果是需要对接的接口方法,那么首字母需要大写,因为java服务端是大小写敏感的,且类的首个字母是大写的.如: b. 普通方法的话(即与对接无关的),那么采用首字母小写的模式,因为java里通常都是这样,这样更合理.如: 2.属性命名,由于java是大小写敏感的,所以属性一般都是加下划线的user_age这种模式,但是delphi是不区分大小写的,所以delphi中的属性 往往都是FieldName这样的模式,这里采用delphi中的命名方法.首字母大写. 3.数据库常用操作:

__set($key,$values) 和__get($varName) 魔术方法设置读取私有属性

__set($key,$val) 对类内私有属性赋值 作用:对私有属性的处理 当在类外对类内的私有属性赋值时会自动调用此函数 __get($varName) 读取类内私有属性 作用:虽然可以外部访问,但有限制条件,否则直接public即可,不需要私有化此属性 根据限制条件 开放访问权限 当对象调用类内私有属性时调用此方法 必须有返回值 return $this->$varName class A{ private $name; private $age; function __set($key,

js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>test</title> 5 </head> 6 <body> 7 <script> 8 //对象构造函数 9 function Atest(name){ 10 //私有属性,只能

访问JSON对象值方法 for in 遍历属性和属性值

<body> <div id="demo"></div> <script> /*方法一:使用点号(.)来访问 JSON 对象的值*/ var myObj, x; //定义变量myObj = { "name":"runoob", "alexa":10000, "site":null };x = myObj.name;document.getElementById