Java程序设计 第4讲 类、包和接口


类是组成java程序的基本要素
是一类对象的原形
它封装了一类对象的状态和方法
它将变量与函数封装到一个类中

class Person{
	String name;
	int age;
	void sayHello(){
		System.out.println("Hello! My name is" + name);
	}
}

字段(field)是类的属性,是用变量来表示的
字段又称为域,域变量、属性、成员变量等
方法(method)是类的功能和操作,是用函数来表示的

构造方法(constructor)是一种特殊的方法
用来初始化(new)该类的一个新的对象
构造方法和类名同名,而且不写返回数据类型

PersonString n,int a)
	name = n;
	age = a;

一般情况下,类都有一个至多个构造方法
如果没有定义任何构造方法,系统会自动产生一个构造方法,成为默认构造方法(default constructor)。
默认构造方法不带参数,并且方法体为空

使用对象的字段或方法,需要用算符".":

	Person p = new Person();
	System.out.println(p.name);
	p.sayHello();
		

这种使用方式的好处
封装性
安全性

方法重载(overload)
方法重载(overloading):多个方法有相同的名字,编译时能识别出来
这些方法的签名(signature)不同,或者是参数个数不同,或者是参数类型不同
通过方法重载可以实现多态

1、this指当前这个对象本身

在方法及构造方法中,使用this来访问字段及方法
例如,方法sayHello中使用name和使用this.name是相同的。即

void sayHello(){
	System.out.println("Hello!My name is "+name);
}

void sayHello(){
	System.out.println("Hello!My name is "+this.name);
}

的含义是相同的。

2.使用this解决局部变量与域同名的问题
使用this还可以解决局部变量(方法中的变量)或参数变量与域变量同名的问题。如,在构造方法中,经常这样使用:

Personint age,String name){
	this.age = age;
	this.name = name;
}

这里,this.age表示域变量,而age表示的是参数变量

构造方法中,用this调用另一构造方法
构造方法中,还可以用this来调用另一构造方法

Person()
{
this(0,"");

}

在构造方法中调用另一构造方法,则这条调用语句必须放在第一句

类的继承
继承(inheritance)是面向对象的程序设计中最为重要的特征之一
子类(subclass),父类或者超类(superclass)
父类包括所有直接或间接被继承的类
Java支持单继承:一个类只能有一个直接父类

子类继承父类的状态和行为
可以修改父类的状态或重载父类的行为
可以添加新的状态和行为
好处
可以提高程序的抽象程度
实现代码重用,提高开发效率和可维护性

派生子类
Java中的继承是通过extends关键字来实现的
class Student extends Person{

}
如果没有extends子句,则该类默认为java.lang.Object的子类
所有的类都是通过直接或者间接地继承java.lang.Object得到的

继承关系
继承关系在UML图中,是用一个箭头来表示子类和父类的关系的
相当于 is a
在这里插入图片描述
字段
字段的继承
子类可以继承父类的所有字段
Student自动具有Person的属性(name,age)
字段的隐藏
子类重新定义一个与从父类那里继承来的域变量完全相同的变量,称为域的隐藏。域的隐藏在实际编程中用的较少(定义一个与父类相同的变量)
字段的添加
在定义子类时,加上新的域变量,就可以使子类比父类多一些属性。如:

class Student extends Person
{
	String school;
	int score;
}

方法的继承
父类的非私有方法也可以被子类自动继承。如,Student自动继承Person的方法sayHello和isOlderThan。(Private没法继承)
方法的覆盖(Override)(修改)
子类也可以重新定义与父类同名的方法,实现对父类方法的覆盖(Override)。

@Override //JDK1.5以后可以用这个注记来表示(不用也是可以的)
void sayHello(){
system.out.println(“Hello!My name is “+name+”.My school is”+school);
}
通过方法的覆盖,能够修改对象的同名方法的具体实现方法。

方法的添加

子类可以新加一些方法,以针对子类实现相应的功能
如,在类Student中,加入一个方法,对分数进行判断

boolean isGoodStudent(){
	return score>=90;
}

4.方法的重载
一个类中可以有几个同名的方法,这称为方法的重载(Overload)。同时,还可以重载父类的同名方法。与方法覆盖不同的是,重载不要求参数类型列表相同。重载的方法实际是新加的方法。
如,在类Student中,重载一个名为sayHello的方法:
void sayHello(Student another){
System.out.println(“Hi!”);
if(school.equals(another.school))
System.out.println(“Schoolmates”);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值