一 类型转换
将一个类型的值赋值给另一个类型的变量称为 类型转换. 格式如下 :
int x=(int)3.14;
System.out.println(x); // 输出3
将要强制转换的类型放在()括号中,并放在要改变类型的值得前面.
double x=34.5455;
int y=(int)x;
System.out.println(x); // 输出34 转换的时候进行下舍入
●java支持将整数自动转换为 浮点数 ,因为没有精度损失.如果要将浮点数赋值给 整型变量 ,需要使用 强制类型转换 ,如:(int)3.14
二 向上转型和向下转型
● 向上转型(upcasting)
你可以将一个子类的实例转换为其父类,这是向上转换
Animal a=new Dog(); //java自动将Dog类型的变量(此为引用变量)向上转换为Animal类型
●向下转型(downcasting)
将父类的对象(实例)转换为其子类,称为向下转换.
Animal a=new Animal();
( (Dog)a ).barking();//将父类的实例a强制转换为Dog类的实例,并调用barking()方法
三 匿名类
在 实例化 类的时候,即时重写类的 构造函数 ,这个类就是匿名类.实例化的同时,重写了构造函数
class Computer{
public void start(){
System.out.println(“Starting”);}
public static void main(String[] args){
Computer c=new Computer(){
@Override public void start(){
System.out.println(“Wooooo”);}
};
c.start();
}
} // 输出”Wooooo”
在调用构造函数来创建Computer对象时,即时更改start()方法的实现
●@Override 注解用于使代码更容易理解,表示方法被重写.
●重写后的start()方法,这种修改只适用于当前对象,而不适用于类本身,类本身的start()方法并没有改变.所以当创建这个类的其他对象的时候,start()方法的实现就是在类中定义的那个
class Computer{
public void start(){
System.out.println(“Starting”);}
}
public static void main(String[] args){
Computer c1=new Computer(){
@Override public void start(){
System.out.println(“Wooooo”);}
} ; // {};代码块跟在new Computer后边,语句结束要用”;”
Computer c2=new Computer();
c2.start();
}// 输出”Starting”
四 内部类
java支持嵌套类,一个类可以是另一个类的成员.与一个类不同的是,内部类可以是私有的,一旦一个内部类被声明为私有的,它就不能从类之外的对象访问
class Robot{
int id;
Robot(int i){
id=i;
Brain b=new Brain();
b.think();}
private class Brain{
public void think(){
System.out.println(id+” is thinking”);}
}
} //类Robot有个内部类Brain,内部类可以访问外部类的所有成员方法和变量,但不能从任何外部类访问