从零双排学java之面向对象

一.什么是面向对象

    java是一门面向对象的语言,那么和c语言的面向过程究竟有什么不同呢?

举一个栗子:你要装修房子。

c语言的话:1.铺好各种线路 2.你需要先把墙壁粉刷 3.铺上瓷砖 

java: 你只需要找一个装修公司,他们就会帮你解决这些问题。

    1.面向对象好处有哪些:

将复杂的问题简单化了

你从事务的执行者变成了指挥者

更贴近人的思维方式,更好思考问题

二.类和对象

类是一类抽象的事物的描述   类名需要使用大驼峰式的书写方式

对象时用类创造出来的一个具体的事物   当new一个对象的时候,相应的在内存中就会开辟一块空间


public class Demo02 {

public static void main(String[] args) {

Car car = new Car();

car.sayHi();

}

}

class Car{

String name; //车名

String displacement; //排气量

String color; //颜色

public void startCar() {

System.out.println("开车");

}                                           

public void stopCar() {

System.out.println("停车");

}

public void sayHi() {

System.out.println(name+""+color+""+displacement+"!");

}


}



上面这段代码中打印结果之所以是空   是因为没有对新创建的这个对象中的属性进行赋值,引用

类型的数据没有赋值,初始值显示为null

三.同名类

在同一个工程当中是可以有相同名字的类,但是需要在不同的包下面

在两个包下分别先创建了一个Person类

public static void main(String[] args) {

//创建一个person对象

Person p1 = new Person();

p1.fun();

//创建不同包下的同名类对象

//需要指定完整的包名来创建对象

//一般情况下:不建议写同名类

com.lanou4g.Person p2=new com.lanou4g.Person();

p2.fun();

//创建不同包下的不同名类\

Test test= new Test();

}

运行的结果:


四.方法中的参数

public static void fun1(int a) {

System.out.println(a);

a =10;

}

//参数是引用数据类型

//要什么类型  就给什么类型

public static void fun2(Person p) {

p.name="流弊";

p.age=24;

}

public static void main(String[] args) {

int a=100;

fun1(a);

System.out.println(a);

Person p1 = new Person();

p1.name= "范鹏";

p1.age=28;

p1.sayHi();

fun2(p1);

p1.sayHi();

}


在方法中基本数据类型的传递是将值传递过去   引用数据类型则是地址的传递

下面这个图中忽略了代码中基本类型传递

五.匿名函数

匿名函数指的是没有名字的对象

在方法传参数的时候使用,可以减少代码量

public static void main(String[] args) {

//创建两个perso对象

//将重复代码抽成一个方法

Person p1 =new Person();

setNameAndAge(p1, "王龙", 18);

Person p2 =new Person();

setNameAndAge(p2, "赵日天", 15);

//使用匿名对象  当方法参数

//好处:减少代码量 

setNameAndAge(new Person(), "王境泽", 19);

//匿名对象也是对象 也可以赋值 调用成员方法

new Person().name="xin";

new Person().age = 30;

new Person().sayHi();

//只调用方法可以使用匿名对象,如果想对对象中的属性进行赋值,需要给对象起名字才能获取到对象

}


六.分装

class Phone {

// java bean 规范(java 实体类创建出来的对象)

// 1.声明成员变量都需要私有化

// 2.给每一个成员变量提供set和get的方法

// 3.必须提供无参的构造方法

private String phoneName;

private String color;


// 对外开放访问方式

public void sayHi() {

System.out.println(phoneName + "" + color);

}


// 获取方法和设置方法


public String getPhoneName() {

return phoneName;

}


public String getColor() {

return color;

}


// 设置方法

public void setPhoneName(String phoneName) {

// 就近原则 关键字this 代表的是本类的对象

// this.成员变量 获取本类的成员变量

// this.成员变量 = "西八" ; 给本类的成员变量赋值

// this.成员方法 调用本类的成员方法

// 谁调用了这个方法谁就是this

this.phoneName = phoneName;


}


public void setColor(String color) {

this.color = color;

}


七.构造函数

public class Demo07 {

public static void main(String[] args) {

// 创建一个pen对象

// 构造方法是系统帮你调用的

// 只要你创建了对象,系统就会帮你调用构造方法

// 构造方法 只会执行一遍

Pen p = new Pen();

p.sayHi();

// 你传了参数,系统就会去找有参的构造方法调用

Pen p1 = new Pen("毛笔", "黑色");

p1.sayHi();


}

}


class Pen {

/*

* 类中书写顺序 1.成员变量 2.构造方法 3.成员方法 4.set/get方法

*/

private String penName;

private String color;


/*

* 构造方法(无参)

*/

public Pen() {

// 初始化成员变量(给成员变量赋值)

this.penName = "圆珠笔";

this.color = "蓝色";

System.out.println("我是pen类的无参构造");

}


/*

* 有参构造方法(构造方法的重载) 在创建对象的时候给成员变量赋值

*/

public Pen(String penName, String color) {

this.penName = penName;

this.color = color;

System.out.println("我是有参的构造方法");

}


// 介绍自己的方法

public void sayHi() {

// 使用 this 可以区分 成员变量 和 局部变量

String penName = "铅笔";

System.out.println(this.penName + " " + this.color);

}


public void setPenName(String name) {

penName = name;

}


public void setColor(String color) {

this.color = color;

}


public String getColor() {

return color;

}


public String getPenName() {

return penName;

}




猜你喜欢

转载自blog.csdn.net/jsymax/article/details/80244418