面向对象
1.类与对象
类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。
(类似生活中的图纸与实物的概念。)
类必须通过对象才可以使用,对象的所有操作都在类中定义。
类由属性和方法组成:
· 属性:就相当于人的一个个的特征
· 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉
class 类名{
成员属性;
成员方法;
}
一个.java文件可以存在多个类,但是只能有个一个public类,而且public类的名字要和.java文件一致。
1.1.类与对象的创建
//普通创建
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
Car c = new Car();
c.brand = "宝马";
c.color = "黑色";
c.show();//
}
}
//创建一个car类
class Car {
//属性
String brand;
String color;
//自动生成无参构造方法
//方法
void show(){
System.out.println("品牌:"+brand+",颜色:"+color);
}
}
//构造方法
作用:
用于对象初始化。 比如游戏界面的加载
执行时机:
在创建对象时,自动调用
特点:
所有的Java类中都会至少存在一个构造方法
如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代
码!
如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Game game = new Game("荒野斗","3V3","300MB","4.8星","一款很肝的游戏");//调用方法
game.show();
}
}
//定义Game类
class Game {
String name;//游戏名
String type;//类型
String size;//大小
String star;//评星
String introduce;//介绍
//有参数的构造方法
Game(String name1,String type1,String size1,String star1,String introduce1){
name = name1;
type = type1;
size = size1;
star = star1;
introduce = introduce1;
}
void show(){
System.out.println("游戏名:"+name);
System.out.println("类 型:"+type);
System.out.println("大 小:"+size);
System.out.println("星 级:"+star);
System.out.println("介 绍:"+introduce);
}
}
建议自定义无参构造方法,不要对编译器形成依赖,避免错误发生。
当类中有非常量成员变量时,建议提供两个版本的构造方法,一个是无参构造方法,一个是全属性做参数的构造方法。
当类中所有成员变量都是常量或者没有成员变量时,建议不提供任何版本的构造。
1.2.方法的重载
方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载 ! 方法的重载与返回值无关!
方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能。
public class Demo {
public static void main(String[] args) {
Math m = new Math();
int num = m.sum(100, 500);
System.out.println(num);
double num2 = m.sum(10.5, 20.6);
System.out.println(num2);
}
}
class Math{
/**
* 一个类中定义的方法, 是允许重载 (相同的方法名称)
*
* 1、方法名称相同
* 2、参数列表长度 或 参数列表类型 或 (参数类型顺序不同)
*
* 注意: 与返回值类型无关
*
*/
int sum(int x,int y) {
int z = x+y;
return z;
}
double sum(double x,double y) {
double z = x+y;
return z;
}
double sum(int x,double y) {
double z = x+y;
return z;
}
double sum(double y,int x) {
double z = x+y;
return z;
}
}
1.3.构造方法的重载
一个类, 可以存在多个构造方法 :
参数列表的长度或类型不同即可完成构造方法的重载 ~
构造方法的重载 ,可以让我们在不同的创建对象的需求下, 调用不同的方法来完成对象的初始化!
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person("张三",18);
p.say();
Person q = new Person("张三");
q.say();
Person a = new Person(18);
a.say();
}
}
class Person {
String name;
int age;
//建立一个方法
Person(String name2,int age2){
name = name2;
age = age2;
}
//重载
Person(String name2){
name = name2;
}
//重载
Person(int age2){
age = age2;
}
void say(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
1.4.匿名对象
没有对象名称的对象 就是匿名对象。
匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收。
只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。
public class Demo8 {
/**
* 如果一个对象 , 我们准备使用两次 或 以上。 那么一定要给对象 创建对象名。
* @param args
*/
public static void main(String[] args) {
new Person().name = "张三";
new Person().age = 18;
new Person().say();
}
}
class Person{
String name;
int age;
void say() {
System.out.println("自我介绍,姓名:"+name+" , 年龄:"+age);
}
}