Java面向对象-类与对象

Java面向对象-类与对象

// 一个JAVA源文件(xx.java)中可以定义多个类吗?

// 可以,但是只能有一个类是public的

类是对象的类型,不同于int等类型,类具有方法

对象是类的实例

类实例化得到对象

类命名规则:同变量名的命名规则,并且不可包含符号 . 或者空格。

类的定义

package CSDN; 
//public访问控制符,表示这个类是公共的 
//class关键字 表示定义一个类 
//Student类名,首字母大写 
public class Student { 
//一个类中可以定义属性和方法 
//属性的定义与之前的变量定义类似 
    int number;	    //学号    类的其中一个属性 
    String name;	// 姓名   类的其中一个属性
// 方法 
//introduction是方法的名字 
    public void introduction() {     //方法
        System.out.println("大家好,我是"+name+",学号是"+number); 
    } 
} 

对象的特征-- 属性、方法

  • 属性--对象具有的各种特征;
  • 方法--对象执行的操作;
  • 对象同时具有属性和方法两项特性;
  • 对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割

面向对象的特征

  1. 抽象:抽象就是忽略一个主题中与当前目标无关的方面,一遍更充分的注意与当前目标有关的方面。抽象包括两个方面,一是过程抽象,二是数据抽象;
  2. 继承:对象的一个新类可以从现有的类中派生,这个过程为类继承。新类继承了原始类的特性,新类成为原始类的子类,原始类成为新类的父类;
  3. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面;
  4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。

方法的定义

格式:public 方法的返回值类型 方法名(){编写方法主体};

Java方法有返回值:如果方法有返回值,则方法主体中必须有return,语法:return 表达式;

Java方法没有返回值:如果方法没有返回值,则返回类型为void,方法主体中不一定需要return;

return放在方法主体最后或者if语句中。

返回值不是输出

方法的调用:·同类中,⽅法互相调⽤直接写⽅法名,不⽤⽣成对象(main⽅法除外);

不同类中,先创建生成类对象,并初始化,通过”对象名.”调用。

package CSDN; 
public class Dog {    //第一个类Dog
    String color = "黄色"; 
    //void表示方法没有返回值 
    public void run() { 
        System.out.println("正在以0.1米每秒的速度向前奔跑"); 
    }
    //String表示方法会返回一个字符串 
    public String bark() { 
    String sound = "汪汪"; 
    return sound; 
    } 
}

package CSDN; 
public class TestDog {   //第二个类TestDog
    public static void main(String[] args) { 
        Dog d = new Dog();   //创建生产第一个类的对象,对象名为d
        System.out.println(d.color);     通过d.color调用第一个类中的color
    //可以修改属性的值 
    // 
    d.color = "黑色"; 
    // 
    System.out.println(d.color); 
    //输出 不等于 返回值 
    //没有返回值的方法,直接调用 
    d.run(); 
    //有返回值的方法,可以接收返回值,进一步处理 
    String s = d.bark();     //将第一个类中bark的值赋给第二类中的s
    System.out.println(s);     //输出s的值
    System.out.println(d.bark());  //通过d.bark()直接调用第一个类中的bark方法,因为第一个类中的bark方法有返回值,所以需要用System.out.println()进一步处理。
    } 
}

创建类、属性、方法,调用方法

package CSDN; 
public class score {									//创建类,类名为score
	String name;	
	int java;
	int sql;											//类的三个属性
	public int sub(){									//创建方法sub(),有返回值为int
		int sub;
		if(sql>java){
			 sub=sql-java;
		}else{
			 sub=java-sql;
		}
		return sub;									//返回sub值,sub的数据类型为int
	}
	public void getSub(){								//创建方法getSub()
		System.out.println("两门课的差的绝对值是:"+sub()); 	//同类中调用sub()方法
	}
	public double avg(){								//创建方法avg(),有返回值double
		double avg=(double)(java+sql)/2;
		return avg;
	}
	public void getAvg(){								//创建方法getAvg()
		System.out.println("两门课的平均分是:"+avg());	//同类中调用avg()方法
	}
}
package CSDN; 
import java.util.Scanner;
public class TestScore {								//创建类TestScore
	public static void main(String[] args) {		
		score sco=new score();						//创建score类对象名为sco,方便之后调用score中的方法
		Scanner sc=new Scanner(System.in);
			System.out.println("请输入学生姓名");
			sco.name=sc.next();
			System.out.println("请输入"+sco.name+"sql成绩");
			sco.sql=sc.nextInt();
			System.out.println("请输入"+sco.name+"java成绩");
			sco.java=sc.nextInt();
			sco.getSub();							//不同类中调用无返回值getSub()方法
			sco.getAvg();							//不同类中调用无返回值getAvg()方法
	}
}
//假如sco.getSub()是有返回值的方法,需要进一步对接收的值进行处理,一般处理的语句为System.out.printlin(sco.getSub());

带参数的方法

之前的方法中例如getSub(),小括号()中是没有参数的,带参数的方法就是将参数填入小括号中,格式:数据类型 参数名1,数据类型 参数名2.....

package CSDN;    //第一个类
public class calc {
	public int add(int x,int y){		//参数为x,y,数据类型均为int
    //属性用不到可以不定义  
    //()参数列表 格式:数据类型 参数1,数据类型 参数2..... 
        int sum=x+y;
		return sum;
	}
	public int sub(int x,int y){		//参数为x,y,数据类型均为int
		int sub;
		if(x>y){
			sub=x-y;
		}else{
			sub=y-x;
		}
		return sub;
	}
	public double avg(int x,int y){		//参数为x,y,数据类型均为int
		double avg=(double)(x+y)/2;
		return avg;
	}
	public int fac(int x){				//参数为x,,数据类型为int
		int s=1;
		for(x=x;x>0;x--){
			s=s*x;
		}
		return s;
	}
}

package CSDN;          //第二个类中调用第一个类中参数
public class testcalc {
	public static void main(String[] args) {
		calc c=new calc();
		System.out.println(c.add(6, 8));
		System.out.println(c.avg(7, 8));
		System.out.println(c.fac(4));
		System.out.println(c.sub(9, 7));	//调用带参数的方法时需要填入方法参数
	}
}

构造方法

什么是构造方法

构造⽅法是⼀种特殊的方法

1. 创建并初始化对象的方法

2. 如果没有自定义构造方法,JAVA会提供⼀个默认的⽆参的构造⽅法

3. 如果有自定义有构造方法,默认的构造⽅法就不能在调⽤

为什么要自定义构造方法

简化对象的初始化过程

如何定义构造方法

1. 构造⽅法的⽅法名必须跟类名相同

2. 构造⽅法没有返回值类型,也不能有void 只要满⾜以上两点要求,就是构造⽅法

简单来说,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值

package CSDN; 
public class Employee { 
    private String name; 
    private int age; 
    private String education; 
    private String job; 
    //构造方法:生成对象并初始化的方法 
    //如果没有自定义构造方法,JAVA会提供一个默认的无参数构造方法 
    //如果自定义构造方法,默认的构造方法就不能调用了 
    //自定义构造方法 
    //1.方法名必须与类名一致 
    //2.构造没有返回值类型,连void也不能写 
    //只要同时满足以上两点要求的方法,就是构造方法 
        public Employee(String name,int age,String education,String job) { 
            this.name = name; 
                if(age>=18) { 
                    this.age =age; 
                }else { 
                    System.out.println("员工最小年龄要求18岁"); 
                    this.age = 18; 
                }
                    this.education =education; 
                    this.job = job; 
        }
    //构造方法重载 
        public Employee(String name,int age,String education) { 
            this.name = name; 
                if(age>=18) { 
                    this.age =age; 
                }else { 
                    System.out.println("员工最小年龄要求18岁"); 
                    this.age = 18; 
                }
                    this.education =education; 
                    this.job = "待分配"; 
        }
    //普通方法的方法名也可以跟类名相同,但是不建议这么命名 
        public void Employee(){ 
            System.out.println("I am a employee"); 
        }
    //自定义的无参的构造方法 
        public Employee() { 
            System.out.println("I am a constructor"); 
        }
        public String getName() { 
            return name; 
        }
        public void setName(String name) { 
            this.name = name; 
        }
        public int getAge() { 
            return age; 
        }
        public void setAge(int age) { 
            if(age>=18) { 
                this.age = age; 
            }else { 
                System.out.println("员工最小年龄要求18岁"); 
                this.age = 18; 
            }
        } 
}

带参数的构造方法

显式的为实例变量赋予初始值

package CSDN;    //第一个类
import java.util.Scanner;
public class Student {
		String name;
		int age;
		public Student(String pname,int page){		//带参数的构造方法
			name=pname;
			if(page>=18){
				age=page;
			}else{
			int a;
				do{ 
				System.out.println("年龄不能小于18岁,请重新输入:");
				Scanner in=new Scanner(System.in);
				a=in.nextInt();
				}while(a<18);
			age=a;
			}
		}
	public void introduction(){
	System.out.println("大家好!我的名字是"+name+"。我今年"+age+"岁啦");
	}
	public void introduction(String caiyi){
		System.out.println("大家好!我的名字是"+name+"。我今年"+age+"岁啦");
		System.out.println("表演的节目是:"+caiyi);
	}
}

package CSDN;    //第二个类
public class TestStudent {
	public static void main(String[] args) {
		Student s1=new Student("张三", 18);		//调用带参数的构造方法
		s1.introduction();
		s1.introduction("唱歌");
	}
}

方法重载

同样的方法名,但数据类型不同,典型例子print()包含int、double、String等数据类型的print()。

  1. 参数类型不同--可以
  2.  参数个数不同--可以
  3.  参数顺序不同--不⼀定,顺序不同⽽且要类型不同

变量的作用域

变量声明的位置决定变量作用域,变量作用域可在程序中按变量名访问该变量的区域。

在哪个{ }内声明的变量,该变量只作用于这个{ }内。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大肠干挑面多加蒜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值