面向对象实验报告二

面向对象分析与设计第二次实验报告

 

一.类的不同类型的方法,属性的可见性

 

可见/访问性

在同一类中

同一包中

不同包中 

同一包子类中 

不同包子类中 

 public

 yes

 yes

 yes

 yes

 yes

 protected 

 yes

 yes

 no

 yes

 yes

 package 

 yes

 yes

 no

 yes

 no

 private

 yes

 no

 no

 no

 no

public  class Student {

    public String home;

    protected int age;

    private String name;

    private String banji;

    Student()

    {

        home = "中国";

    }  

    Student(int age,String name,String home,String banji){             //构造函数

        this.age = age;

        this.name = name;

        this.banji = banji;

        this.home = home;

    }

    public void say()

    {

        System.out.println("我叫"+name+"今年"+age+"岁"+"班级"+banji);

    }

}

定义了 一个 类 Student

public 属性 home

protected 属性 age

private 属性 name banji

public 方法 say()

 

1.同一类的属性方法 不管是 什么类型的 都可见。

 

2.同一包中定义的类 除了private 类型的属性不可见,其他都可见。

在同一包中声明对象

Student s1 = new Student();

不能访问 private 类型的 如:s1.name s1.banji是错误的

 

3.在不同包中定义的类 只有public 类型的属性可见

//不同包中的类 可以访问 类中 public 的属性和方法

        Testclass t1 = new Testclass();

        t1.id = "1";

        //t1.age  private 类型的不能访问

        //t1.name protected类型也不能访问

4.同一包中的子类,除了private 类型不可见,其他都可见

 

5.不同包子类中 只有public 和 protected 类型的 属性方法可见

 

 

二.继承及重写父类函数的方法属性

public class Student2 extends Student{

/**

 *  重写属性

 *  public String home;

    protected int age;

    private String name;

    private String banji;

 */

 public void say(){    //重写方法  

        System.out.println("这是子类重载的方say "+"年龄"+age+"来自"+home);

    }  

    Student2()       //子类的构造方法

    {

        super();

        System.out.println("子类自定义了 自己的构造方法");

        //name = "hyf";     同包子类不能 访问 父类中的 private定义的成员

        age  = 80;  //      同包子类可以访问 父类中的protected 定义的成员

        home = "成都";

    }

}

 

三.数据类型之间的转换

Java中数据类型及其之间的转换

基本的数据类型

基本类型有以下四种:
1)int长度数据类型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
2)float长度数据类型有:单精度(32bits float)、双精度(64bits double),JAVA中将小数默认为double类型,若要定义float需在数据后面用f声明;
3)boolean类型变量的取值有:ture、false
4)char数据类型有:unicode字符,16位
对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long

基本的数据类型由低级到高级分别为:

byteshortchar)——int——long——float——double

 

PS:此处的“级别”是指表示值的范围的大小。

数据类型之间的转转换

分为以下几种情况:

1)低级到高级的自动类型转换;

2)高级到低级的强制类型转换(会导致溢出或丢失精度);

3)基本类型向类类型转换;

4)基本类型向字符串的转换;

5)类类型向字符串转换

基本数据类型之间的转换规则


1.在一个双操作数以及位运算等算术运算式中,会根据操作数的类型将低级的数据类型自动转换为高级的数据类型,分为以下几种情况:

1)只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;

2)只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;

3)只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;

4)两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。  

2. 如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,再做其它类型的自动转换。

3. 对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。 如:

short i=99 ;
char c=(char)i;
System.out.println("output:"+c); 

4. 不能在布尔值和任何数字类型间强制类型转换;

5. 不同级别数据类型间的强制转换,可能会导致溢出或精度的下降。 

6. 当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。例如:byte b;
    b=3;
    b=(byte)(b*3);//必须声明byte。 

包装数据类型与基本数据类型之间的转换

简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)
而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。
1.字符串与其它类型间的转换
⑴其它类型向字符串的转换
①调用类的串转换方法:X.toString();
②自动转换:X+“”;
③使用String的方法:String.volueOf(X);
⑵字符串作为值,向其它类型的转换
①先转换成相应的封装器实例,再调用对应的方法转换成其它类型
例如,字符中“32.1”转换double型的值的格式为:

new Float(“32.1”).doubleValue()。

也可以用:Double.valueOf(“32.1”).doubleValue()
②静态parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法

 

 

转换实例

1)基本类型向类类型转换

正向转换:通过类包装器来new出一个新的类类型的变量
Integer a= new Integer(2);
反向转换:通过类包装器来转换
int b=a.intValue();

通过类包装器——>基本数据类型
eg1:int i=Integer.parseInt(“123”)
说明:此方法只能适用于字符串转化成整型变量
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。

2)基本类型向字符串的转换
正向转换:
如下:
System.out.println(""+2+3);// “""”把2转成字符串操作;
System.out.println(2+3);   // 不存在转换。
System.out.println(2+3+"");// 前两个数值相加后,被“""”转成字符串。
System.out.println(2+""+3);// 同第一个。

输出显示为:23,5,5,23

3)类类型向字符串转换

正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
反向转换:通过类包装器new出一个新的类类型的变量
eg1: int i=Integer.valueOf(“123”).intValue()
说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。

 

你可能感兴趣的:(面向对象)