- 为Vehicle 类创建构造方法给成员变量赋值
public class Vehicle {
double speed; //变量声明部分,刻画速度
int power; //变量声明部分,刻画功率
Vehicle(double speed, int pow;)[
this.speed=speed;power=pow;
} //创建构造方法给成员变量赋值
void speedUp(int s) { //方法定义,刻画加速功能
speed=speed+s;
}
void speedDown(int d) { //方法定义,刻画减速功能
speed=speed-d;
}
void setPower(int p) {
power=p;
}
int getPower() {
return power;
}
double getSpeed() {
return speed;
}
}
public class Exercise4_2{
public static void main(String args[]) {
Vehicle car1= new Vehicle(50,20);
System.out.println("car1的速度:"+car1.getSpeed());
System.out.println("car1的速度:"+car1.getSPower());
}
}
- 构造方法重载:修改程序1再定义一个无参的构造方法为成员变量赋默认值:
Vehicle (){
Speed=55;
Power=8;
} //无参构造方法
public static void main(String args[]) {
Vehicle car1=new Vehicle(40,10);
Vehicle car2=new Vehicle();//调用无参构造方法
System.out.println("car1的速度:"+car1.getSpeed());
System.out.println("car1的速度:"+car1.getSPower());
System.out.println("car1的速度:"+car2.getSpeed());
System.out.println("car1的速度:"+car2.getSPower());
}
- 修改程序2无参构造方法调用有参构造方法给成员变量赋值:
Public class User{
public static <Vehicle> void main(String args[]) {
Vehicle car1,car2;
Car1=new Vehicle();
Car2=new Vehicle();
Car1.setPower(128);
Car2.setPower(76);
System.out.println("car1的功率:"+car1.getPower());
System.out.println("car2的功率:"+car2.getPower());
Car1.setspeed(20);
Car2.setSpeed(28);
System.out.println("car1的速度:"+car1.getspeed());
System.out.println("car1的速度:"+car1.getspeed());
}
}
构造方法特点:
- 方法名和类名相同
- 无返回值类型的声明
- 在用new创建对象时调用。
- 用this(参数)在一个构造方法里调用另一个构造方法,且必须时第一条语句。
- 给一个构造方法前面加上返回值类型的声明 如void,观察程序的变化,该如何调用它。
答:如果加上void,它不会返回任何值,不能将它赋值给变量或在表达式中使用
5.Compute类中的add方法实现方法重载
class Compute {
int add(int a,int b) {
return a+b;
}
double add(int x,double y) {//【代码1】是否正确
return x+y;
}
double add(double a,double b) {
return a+b;
}//【代码2】//定义对两个实型数据求和的方法
String add(string a,string b){
Return a+b;
}//【代码3】//定义对两个字符串数据连接的方法
public class test
{
public static void main(String args[]) {
Compute tom = new Compute ();
System.out.println(tom.add(10,20));
System.out.println(tom.add("124325","aasdfg"));
System.out.println(tom.add(10.0,2.26));
}
}
注:方法重载不能通过返回值来区分,只能通过参数来区分。
答:【代码一】不正确,double类型的不能后面跟两个int类型,
【代码一】要改为double add(int x,double y)
【代码二】为:double add(double a,double b) {
return a+b;
}
【代码三】为:String add(string a,string b){
return a+b;
}
6.将Vehicle类文件移到另一个包中,看程序需要做什么修改。
总结:
控制权限:
私有的控制权限:使成员访问限定在( 类 )内。
缺省的访问控制权限:使类及成员访问限定在( 包 )内。
Public访问控制权限:使类及成员可以实现( 跨包)访问。
类:√ ×
作用域 | 同一包其他类 | 其他包的类 |
public | √ | √ |
缺省 | √ |
对于public类的类成员:
作用域 | 同一类内 | 同一包 | 在其他包的子孙类 | 其他包的其他类 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
缺省 | √ | √ | ||
private | √ |
7.区分类成员变量、方法和块中的变量
class value {
public int x,y;
value(int a,int b) {
x=a; y=b;
}
int add() {
int x=2;
{
int sum=0;
sum=sum+x+y;
}
return sum;
}
}
public class A {
public static void main(String args[]) {
int total;
value num=new value(4,5);
System.out.println("add="+num.add());
}
}
运行结果:
add=7
总结:类成员变量是(全局/局部)变量,可以被类中所有方法共享;方法和块中的变量是(全局/局部)变量,只能在所定义的领域内被访问。
8.可变参数
public class Computer {
public int add(int... x) { //定义x为可变参数
int sum=0;
for(int i=0;i<x.length;i++) {
sum=sum+x[i];
}
return sum;
}
}public class Example4_6 {
public static void main(String args[]){
Computer com = new Computer();
System.out.println(com.add());
System.out.println(com.add(1,2,3));
}
}