第七讲:面向对象编程(二)

向前吧,荡起生命之舟,不必依恋和信泊,破浪的船自会一路开放常新的花朵。

本讲内容:成员变量、方法、方法的重载、构造函数

一、成员变量(类或对象的状态)

(1)、认识成员变量、类变量、实例变量、局部变量、方法参数之间的区别

1、成员变量(field)是没有定义在代码块(包括初始化块、成员方法)中的变量。成员变量是类变量还是实例变量取决于在其声明中是否使用了static关键字。

2、类变量在声明是用了static关键字,它的另一个名字叫静态变量、静态成员变量(static field) 。

3、实例变量是在声明时没有使用static关键字的成员变量,它的另一个名字叫非静态成员变量(non-static field)。

4、定义在代码块里的变量被称为局部变量(local variable)。

5、定义在方法声明中的变量叫方法参数。

区别如下:

public class text {
	static String s1 = "类变量";
	String s2 = "实例变量";
	{
		String s3 = "初始化代码块里的局部变量";
	}
	static {
		String s4 = "静态初始化代码块里的局部变量";
	}
	// <span style="font-family: Arial;">s5</span><span style="font-family: Arial;">方法的参数和方法里的局部变量</span>
	public void printString(String s5) {
		String s6 = "方法里的局部变量";
	}
	// 静态类方法(可以直接被类名所调用)
	public static void printString() {
		String s7 = "类方法里的局部变量";
		System.out.println(s7);
	}
	public static void main(String[] args) {
		text.printString(); //直接被类名所调用静态类方法
		Lei08_1 a=new Lei08_1();//创建对象
		a.printString("参数的值");//调用实例方法
	}
}

(2)、变量的初始化

实例变量一经定义就会有初始值(默认的,第二讲讲到),局部变量定义时不赋初值而直接使用,编译器会报错

public class text {
	int i;
	{
		int j;
		System.out.println(j);<span style="font-family: Arial;">//会报错</span>
	}
	public static void main(String[] args) {
	}
}

二、方法(类或对象的行为)

Java中类的行为由类的成员方法来实现。类的成员方法由方法的声明和方法体两部分组成。

1、修饰符,可选,用于指定谁有权限访问此方法。

2、返回值类型,必选,用于指定该方法的返回值数据类型;如果该方法没有返回值,则要用关键字 void 进行标示。方法的返回值只能有一个。

3、参数列表,可以有0到多个,多个参数之间要用逗号隔开,参数的写法形如:String[] args, int age 这样。

4方法名,必选,命名规则是方法名和变量名的首字母要小写,不要弄个大写方法名出来。

5方法体,可选,

6、大括号,可选,大括号不写的方法叫抽象方法。

注意:属性和方法之间的关系

“状态影响行为,行为影响状态”。如果每个对象都是从同一个类中生成出来,每个对象如果都一摸一样,那么这个世界是不是太无趣了。我们看到上一讲的例子中,小狗的大小属性影响了他叫的方式。通过设置狗大小的方法又改变了它的状态。这些属性和方法的细节上的不同导致了,多姿多彩的对象,我们后面还会讲到更多的技术,也会导致更多的多样性。

三、方法重载 overload

在Java 中允许类定义中多个方法的方法名相同,只要它们的参数声明不同即可。这种情况下,该方法就被称为重载(overloaded ),这种方式就叫做方法重载(method overloading )。方法重载是实现程序多样性的一个重要手段。也可以称作多态的一种表现方式。

class Num{
	public void max(int a,int b){
		System.out.println(a>b?a:b);
	}
	public void max(double a,double b){
		System.out .println(a>b?a:b);
	}
	public void max (int a,int b,int c){
		int max=a>b?a:b;
		System.out.println(max>c?max:c);
	}
}
public class L6 {
	public static void main(String[] args) {
		Num a=new Num();
		a.max(45, 3);
		a.max(3.2, 6.5);
		a.max(8, 9, 2);
	}
}

上面的例子说明了参数的个数,类型和顺序任意一项不同就算不同的参数声明

四、构造函数(即构造方法)

在Java中,对象是构造出来的,特意用了一个new关键字来标示这个创建的过程。

class Lion{
	private String name;
	private int age;
	public Lion() {
		System.out.println("无参数构造方法");
	}
	public Lion(String name,int age){//有参数构造方法
		this.name=name;
		this.age=age;
		System.out.println("姓名:"+name+"\t年龄:"+age);
	}
}
public class L7 {
	public static void main(String[] args) {
		Lion a=new Lion();
		Lion b=new Lion("黎开权", 20);
	}
}

我们看到创建对象的过程就是执行构造函数的过程,而且也看到构造方法也可以重载。

注意:构造函数或者说构造方法,它不是方法。它们之间的三大区别

1、构造函数没有返回值

2、构造函数和类名相同

3、构造函数不能用final、static、abstract修饰

本讲就到这里,Take some time and enjoy it

时间: 2024-08-07 05:59:28

第七讲:面向对象编程(二)的相关文章

32位汇编第七讲,混合编程,内联汇编

32位汇编第七讲,混合编程 博客园IBinary原创 QQ:2510908331  博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 混合编程的概念,有时候我们会想,C语言可不可以调用汇编的函数,或者反过来调用 或者说C语言里面内部直接内联汇编去编写. 可以实现,静看怎么实现 一丶C语言调用汇编语言的函数 1.创建工程和代码 ①创建VC++控制台程序 FILE(文件) - NEW (新建) 然后我们打开源文件,一级一级展开,找到我们的main函数 那

Python基础-第七天-面向对象编程进阶和Socket编程简介

本篇内容: 1.面向对象编程进阶-静态方法 2.面向对象编程进阶-类方法 3.面向对象编程进阶-属性方法 4.面向对象编程进阶-特殊成员(内置方法) 5.面向对象编程进阶-反射 6.异常处理.断言 7.Socket编程简介 一.面向对象编程进阶-静态方法 1.静态方法的实现 通过@staticmethod装饰器可以把其装饰的方法变为一个静态方法: 变成静态方法后,形参中可以不用写self了.如果写了self,默认是不会把对象本身传递给self,需要手动传递: class Dog(object):

第11讲——面向对象编程

面向对象编程(OOP)的重要特性: 抽象 封装和数据隐藏 多态 继承 代码的可重用性 为了实现这些特性并将它们组合在一起,C++做出的最重要的改进--提供了类. 我们之前学的C语言时都是进行的过程性编程,而现在学的C++却是面向对象编程. 下面我们看一个例子,它揭示了OOP观点与过程性编程的差别. EDG垒球队的一名新成员被要求记录球队的统计数据.很自然,会求助于计算机来完成这项工作. 如果求助一位过程性程序员,他可能这样考虑: 我要输入每名选手的姓名.击球次数.击中次数.命中率(命中率指的是选

js面向对象编程(二) 构造函数继承

构造函数绑定 //基类建筑物var building = function () {    this.spec = "building";}; //address:房子地址,toward:房子朝向var house = function (address, toward) {    this.address = address;    this.toward = toward;}; //使房子继承建筑物 //使用call或者apply方法,将父对象的构造函数绑定在子对象上,在子对象构造

python之路---面向对象编程(二)

类的继承 1.在python3中,只有新式类,新式类的继承方式为:广度优先.而python2中,经典类的继承方式为:深度优先.那么我们来看看深度优先和广度优先的区别吧 如下图,为类之间的继承关系.B,C继承A,D继承B,E继承C,F继承D,E   深度优先: class A: # def foo(self): # print 'from A' pass class B(A): # def foo(self): # print 'from B' pass class C(A): # def foo

Java面向对象编程(二)

上一篇博文里总结了面向对象三大特性在Java中的体现.如今谈一谈Java中的抽象类,接口,内部类等特性. 一. 抽象类 public abstract class Shape { public int shapeID = 0; public abstract double getArea(); } Java中同意类.接口或成员方法具有抽象属性,而不同意成员域或构造方法具有抽象属性. 类修饰词中含有abstract的类具有抽象属性,称为抽象类:接口总是具有抽象属性. 假设成员方法的修饰词中含有ab

Python入门之面向对象编程(二)python类的详解

本文通过创建几个类来覆盖python中类的基础知识,主要有如下几个类 Animal :各种属性.方法以及属性的修改 Dog :将方法转化为属性并操作的方法 Cat :私人属性讲解,方法的继承与覆盖 Tiger :子类定义时调用父类方法(super的使用) Animal python中的一个类中有属性和方法,而二者都分为很多种类型,如下所示 属性分为普通属性和类属性 方法分为普通方法.类方法.静态方法. 具体定义方法和使用见下面的代码和注释,各个属性和方法的使用习惯等见最后的 print_anim

python第七周-面向对象编程进阶

申明:本文内容主要转自Alex老师的博客,仅供学习记录! 静态方法 只是名义上归类管理,实际上在静态方法里访问不了类实例中的任何属性 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法 1 clas

php面向对象编程(二)

现在我们来了解一下面向对象的一个封装性的问题 封装性:在我的理解里面 可以理解为一个u盘 我们使用u盘的接口与电脑进行数据之间的交互 但是我们不能看到里面的结构 这个特性我们可以称为封装性 好处:利用这个特性我们可以最大程度的提高代码的质量 我们在其他代码中只要对接口进行引用不用每次都写 提高代码的自量 以及减少排除bug的难度 现在我们来思考个问题:个人电脑都有一个密码,不想让其它人随意的登陆,在你电脑里面拷贝和粘贴.还有就是像人这个对象, 身高和年龄的属性, 只能是自己来增涨,不可以让别人随

Python之路【第五篇】:面向对象编程二

类成员 一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 #!/usr/bin/env python #-*- coding:utf-8 -*- class Dbcontrl(object): action = 'contrl' def __init__(self,hostname,port,username,password,dbname,arg): self.hostname = hostname s