您好,欢迎来到榕意旅游网。
搜索
您的当前位置:首页Java注意3

Java注意3

来源:榕意旅游网


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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务