Java面向对象

132 阅读4分钟

类是模子,确定对象将会拥有特征(属性)和行为(方法)

对象是类的实例表现

类是对象的类型

对象是特定类型的数据

属性:对象具有的各种静态特征

方法:对象具有的各种动态行为

包名的推荐命名规范

1.英文字母小写

2.域名的倒序

Cat.java

package com.imooc.animal;
/**
 * 宠物猫类
 * @author Hurric4ne
 *
 */
public class Cat {
	//成员属性:昵称、年龄、体重、品种
	//系统会给成员属性默认值
        //boolean默认值为false
	String name;//String类型默认值null
	int month;//int类型默认值0
	double weight;//double类型默认值0.0
	String species;
	//成员方法:跑动、吃东西
	public void run() {
		System.out.println("小猫会跑");
	}
	public void run(String name) {
		System.out.println(name+"会跑");
	}
	public void eat() {
		System.out.println("小猫会吃");
	}
}

CatTest.java

package com.imooc.animal;
public class CatTest {
	public static void main(String[] args) {
		// 对象实例化
		Cat one = new Cat();
		// 测试
		one.eat();
		one.run();
		one.name = "花花";
		one.month = 2;
		one.weight = 1000;
		one.species = "英国短毛猫";
		System.out.println(one.month);
		System.out.println(one.name);
		System.out.println(one.species);
		System.out.println(one.weight);
		one.run(one.name);
	}
}

为什么main方法要放在CatTest类中?

单一职责原则(单一功能原则)

建议一个类有且只有一个引起功能变化的原因,不同的职责放在不同的类当中

如果在一个类当中,承担的功能越多,交融、耦合性就会越高,被复用的可能性就会越低

CatTest是如何找到Cat的?(类间如何识别?)

如果在CatTest类中找不到Cat,则到同名的包下寻找可允许访问的Cat类

面向对象五个基本原则(SOLID)

SRP单一责任原则

OCP开放封闭原则

LSP里氏替换原则

DIP依赖倒置原则

ISP接口分离原则

对象实例化

实例化对象的过程可以分为两部分:

-声明对象 Cat one     在栈中开辟一片叫做one的内存空间,但为空盒子(null)

-实例化对象 new Cat();  在堆中完成初始化

对象实例化的另一种形式

                Cat one = new Cat();
		Cat two=one;//one和two指向同一片内存空间

注意事项:

需要多次访问同一对象时,必须进行声明

同一作用范围内,不能定义同名对象

可以同时声明多个引用,用逗号分隔

构造方法

构造方法只能与new一起进行调用,不能通过对象名、类名等其他形式调用,在非构造方法中,只能结合对象实例化操作被调用,不能通过方法名被访问

1.构造方法必须与类同名且没有返回值(不能用void修饰)

2.构造方法的语句格式

3.可以指定参数

public 构造方法名(){ 

      //初始化代码

}

4.只能在对象实例化的时候调用

5.当没有指定构造方法时,系统会自动添加无参的构造方法

6.当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法

7.一个类中可以有多个构造方法

8.构造方法的调用只能在构造方法之间完成,通过this()调用构造方法,必须放在方法体内第一行,可以通过this调用本类中带参或者无参构造方法,调用带参构造方法时,需要按顺序传入设定的参数,在一个构造方法内只能调用一个构造方法

        public Cat() {
		System.out.println("无参构造方法");
	}
	public Cat(String name,int month,double weight,String species) {
		this();
		this.name=name;
		this.month=month;
		this.weight=weight;
		this.species=species;
	}

Cat.java

        public Cat(String name) {
		System.out.println("有参构造方法");
	}
	public Cat() {
		System.out.println("无参构造方法");
	}

CatTest.java

                Cat one = new Cat("花花");
		Cat two = new Cat();

谁调用了this谁就是当前对象,this可以理解为指向当前对象的一个引用

        public Cat(String name,int month,double weight,String species) {
		this.name=name;
		this.month=month;
		this.weight=weight;
		this.species=species;
	}
	public void run() {
		this.eat();
		System.out.println("小猫会跑");
	}

就近原则总结

关于在Java方法调用传参时涉及到的“就近原则”,通俗来说可理解为“有需要,找最近的”

最近指可访问范围内的最近

run方法执行第一句,由于此时在run方法中,由于“就近原则”的影响,其“可访问范围内”的month,最近的是方法形参的month,也就是说month=month,执行操作实际为,方法形参的自身赋值,说白了,这句话的执行类似于1=1,无实际意义

如果方法里存在局部变量和成员属性同名,但程序有需要在该方法里访问成员属性时,则必须使用this进行调用

大部分时候,类的成员方法访问同类中其他成员方法时,this关键字可加可不加,效果相同