Java面向对象程序设计
1. 面向对象的程序设计有三个主要特征:
封装性
继承性
多态性
封装性:把描述对象属性的变量及实现对象功能的方法合在一起,定义为一个程序单位,并保证外界不能任意更改其内部的属性值,也不能任意调动其内部的功能方法。特点:为封装在一个整体内的变量及方法规定了不同级别的“可见性”或访问权限。
继承性:若一个子类只允许继承一个父类,称为单继承;若允许继承多个父类,称为多继承。Java语言通过接口(interface)的方式来弥补由于Java不支持多继承而带来的子类不能享用多个父类的成员的缺憾。
多态性:多态是允许程序中出现重名现象。Java语言中含有方法重载与成员覆盖两种形式的多态。成员覆盖:子类与父类允许具有相同的变量名称,但数据类型不同,允许具有相同的方法名称,但完成的功能不同。方法覆盖即为Java注意2中同方法但参数不同。
2. 类
类的定义:
class 类名称
{
数据类型属性 ;
…. 声明成员变量(属性)
返回值的数据类型 方法名称(参数1,参数2…)
{
程序语句; 定义方法的内容
return 表达式;
注:声明类时,类名中单词的首字母是大写的,这是规定的一种符合标准的写法
talk()方法用于向屏幕打印信息
3.对象
类名 对象名 = new 类名() ;
创建属于某类的对象,需要通过下面两个步骤来实现:
1、声明指向\"由类所创建的对象\"的变量
2、利用new创建新的对象,并指派给先前所创建的变量。
例:
Person p ; // 先声明一个Person类的对象p
p = new Person() ; // 用new 关键字实例化Person的对象p
或
Person p = new Person() ; // 声明Person对象p并直接实例化此对象
注:对象只有在实例化之后才能被使用,而实例化对象的关键字就是new
访问对象中某个变或方法:
访问属性:对象名称.属性名
访问方法:对象名称.方法名()
例:p.name ; // 访问Person类中的name属性
例:class TestPersonDemo
{
public static void main(String[] args)
{
Person p = new Person() ;
p.name = \"张三\" ;
p.age = 25 ;
p.talk();
}
}
输出结果:
我是:张三,今年:25岁
对Person对象P的访问操作过程:
4. 创建多个对象
例:
class Person
{
String name ;
int age ;
void talk()
{
System.out.println(\"我是:\"+name+\",今年:\"+age+\"岁\");
}
}
public class TestPersonDemo1
{
public static void main(String[] args)
{
Person p1 = new Person() ; // 声明并实例化一Person对象p1
Person p2 = new Person() ; // 声明并实例化一Person对象p2
p1.name = \"张三\" ;
p1.age = 25 ; // 给p1的属性赋值
p2.name = \"李四\" ;
p2.age = 30 ; // 给p2的属性赋值
p1.talk() ;
p2.talk() ; // 分别用p1、p2调用talk()方法
输出结果:
我是:张三,今年:25岁
我是:李四,今年:30岁
5. 类的封装性
class Person
{
private String name ;
private int age ;
void talk()
{
System.out.println(\"我是:\"+name+\",今年:\"+age+\"岁\");
}
}
public class TestPersonDemo3-1
{ public static void main(String[] args)
{
// 声明并实例化一Person对象p
Person p = new Person() ;
// 给p中的属性赋值
p.name = \"张三\" ;
// 在这里将p对象中的年龄赋值为-25岁
p.age = -25 ;
// 调用Person类中的talk()方法
p.talk() ;
}
}
编译结果:
TestPersonDemo3.java:18: name has private access in Person
p.name = \"张三\" ;
^
TestPersonDemo3.java:20: age has private access in Person
p.age = -25 ;
^
2 errors
上面的代码在声明Person 的属性是在前面加了private,若不加,我们定义age为—25时,输出的结果即为—25,这显然不符合逻辑。
加了private后编译提示的错误为:属性(name、age)为私有的,所以不能由对象直接进行访问。这样就可以保证对象无法直接去访问类中的属性。如果要给对象赋值则要对属性增加一些方法,如:setXxx()、getXxx()这样的公有方法来解决这一矛盾
封装类中的属性或方法:
封装属性:private 属性类型 属性名
封装方法:private 方法返回类型 方法名称(参数)
例:private声明属性
class Person
{
private String name ;
private int age ;
void talk()
{
System.out.println(\"我是:\"+name+\",今年:\"+age+\"岁\");
}
public void setName(String str)
{
name = str ;
}
public void setAge(int a)
{
if(a>0)
age = a ;
}
public String getName()
{
return name ;
}
public int getAge()
{
return age ;
}
}
public class TestPersonDemo3-2
{
public static void main(String[] args)
{
// 声明并实例化一Person对象p
Person p = new Person() ;
// 给p中的属性赋值
p.setName(\"张三\") ;
// 在这里将p对象中的年龄赋值为-25岁
p.setAge(-25) ;
// 调用Person类中的talk()方法
p.talk() ;
}
}
输出结果:
我是:张三,今年:0
注:用private声明的属性或方法只能在其类的内部被调用,而不能在类的外部被调用, 可以先暂时简单的理解为,在类的外部不能用对象去调用private声明的属性或方法。
例:private声明方法
class Person
{
private String name ;
private int age ;
private void talk()
{
System.out.println(\"我是:\"+name+\",今年:\"+age+\"岁\");
}
public void setName(String str)
{
name = str ;
}
public void setAge(int a)
{
if(a>0)
age = a ;
}
public String getName()
{
return name ;
}
public int getAge()
{
return age ;
}
}
public class TestPersonDemo4
{
public static void main(String[] args)
{
// 声明并实例化一Person对象p
Person p = new Person() ;
// 给p中的属性赋值
p.setName(\"张三\") ;
// 在这里将p对象中的年龄赋值为-25岁
p.setAge(-25) ;
// 调用Person类中的talk()方法
p.talk() ;
}
}
编译结果:
TestPersonDemo4.java:39: talk() has private access in Person
p.talk() ;
^
1 error
此时的talk方法被封装,只能在类的内部访问
注:关于封装与否并没有一个明确的规定,不过从程序设计角度来说,一般说来设计较好的程序的类中的属性都是需要封装的。此时,要设置或取得属性值,则只能用setXxx()、getXxx()方法,这是一个明确且标准的规定。
在类的内部调用方法
class Person
{
private String name ;
private int age ;
private void talk()
{
System.out.println(\"我是:\"+name+\",今年:\"+age+\"岁\");
}
public void say()
{
talk();
}
public void setName(String str)
{
name = str ;
}
public void setAge(int a)
{
if(a>0)
age = a ;
}
public String getName()
{
return name ;
}
public int getAge()
{
return age ;
}
}
public class TestPersonDemo5
{
public static void main(String[] args)
{
// 声明并实例化一Person对象p
Person p = new Person() ;
// 给p中的属性赋值
p.setName(\"张三\") ;
// 在这里将p对象中的年龄属性赋值为30岁
p.setAge(30) ;
// 调用Person类中的say()方法
p.say() ;
}
}
输出结果:
我是:张三,今年:30岁
在程序中调用Person类中的say()方法,其实也就是调用了Person类中的talk()方法。
注意:
这个时候say()方法调用talk()方法,如果非要强调对象本身的话,也可以写成如下形式:
this.talk() ;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务