我是张骚年,量子玄学信徒,祖安冲浪王者,B站白嫖大师,撕少保护协会资深会员,一个没有感情的表情包机器。java
应届二本物理找不到工做,准备用五个月转行Java”上流社会“程序员
学习面向对象的第一天,在网上看到一个段子:程序员是不缺对象的,没有什么对象是一个new解决不了的,若是有,就多new几个。
我挠了挠头,程序员路子都这么野的吗?
编程
计算机中的对象 : 复杂的客观事物在java程序中的表现形式。
在计算机眼中,一切都是对象。
举个例子:函数
描述一个对象:以水杯为例oop
- 名称、材料、颜色、大小 ------外在特征
- 除了有特征,还具备保温功能能干什么 -------所具备的功能
- 在描述的时候 除了描述特征、还须要描述功能
描述一我的 应该怎么描述学习
- 身高、体重、年龄、衣服颜色
- 对应的是数据,表明对象有什么特征、外在特色
- 程序中以变量体现,称为对象的属性
- 吃饭、睡觉、喝水、唱歌
- 对应的是行为和功能,表明对象能作什么
- 程序中以函数体现,函数之后统称为方法,称为对象的方法
经过面向对象能够在Java中模拟客观是的事物:测试
总结this
类:保存了一类对象的信息,定义了对象的属性和方法【对象的模板】
类的组成:spa
public class Day07 {public static void main(String[] args) { 复制代码
// 建立对象经过new Dog dog = new Dog();
// 给狗的属性赋值 dog.name = "hhh"; dog.age = 18;
// 调用狗的方法 dog.eat(); } }
class Dog{ // 定义属性 狗的名字 String name; // 狗的年龄 int age;
复制代码public static void main(String[] args) { 复制代码// 定义方法 public void eat(){ System.out.println("狗能够吃"); } }
面向对象的开发方式:
- 定义类
- 建立对象
- 使用对象的实例变量和实例方法完成需求
在一个类中,同一种功能可能会有多种表现形式。
例如:人的吃功能,对于不一样的东西有不一样的吃方式,吃药、吃饭、吃口香糖
所以在一个类中,写吃方法的时候,也会存在实现方式的差别。也就是方法名字相同 可是实现不一样
这样的作法称之为方法的重载
方法的重载:在一个类中定义多个方法名相同,参数列表不一样的方法
参数列表不一样的状况有:
注意:形参名不一样,不算形参列表不一样,不构成重载
使用的时候根据外界传入的实参来匹配对应的方法
编译器根据调用者传递的实际参数,肯定调用哪个方法
编译器根据参数匹配方法时,先进行精确匹配,若是匹配不成功,则就近向上匹配,可是注意避免混淆的现象
public class Day07 {
public static void main(String[] args) {
// 建立对象经过new
Dog dog = new Dog();
// 给狗的属性赋值
dog.name = "hhh";
dog.age = 18;
// 调用狗的方法
dog.eat();
// 调用重载的方法
dog.eat("骨头");
}
}
class Dog{
// 定义属性 狗的名字
String name;
// 狗的年龄
int age;
// 定义方法
public void eat(){
System.out.println("狗能够吃");
}
// 重载的方法
public void eat(String food){
System.out.println("狗能够吃"+food);
}
}
复制代码
构造方法:类的内部除了有属性、方法 还有一个构造方法,构造方法 仍是方法,只是比较特殊
构造方法的特色:
public class Day07 {
public static void main(String[] args) {
// 建立对象经过new 使用构造方法建立对象
Dog dog = new Dog();
// 使用有参构造方法建立对象
Dog kkk = new Dog("kkk", 23);
// 给狗的属性赋值
dog.name = "hhh";
dog.age = 18;
// 调用狗的方法
dog.eat();
// 调用重载的方法
dog.eat("骨头");
}
}
class Dog{
// 定义属性 狗的名字
String name;
// 狗的年龄
int age;
// 定义方法
public void eat(){
System.out.println("狗能够吃");
}
// 重载的方法
public void eat(String food){
System.out.println("狗能够吃"+food);
}
// 无参构造方法
public Dog() {
}
// 两个参数的构造方法
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
复制代码
一个对象的建立 不是一蹴而就的。有步骤的,第一步干啥,第二步干啥 第三步干啥
对象建立的触发点:使用new关键字建立对象
名词 | 含义 |
---|---|
overload | 重载 |
class | 类 |
public class Test17 {
public static void main(String args[]) {
Worker w = new Worker("zhangsan", 26, 10000.0);
Address addres = new Address("北京市海淀区清华园1号院", "100010"); w.address = addres;
}
}
//工人类
class Worker {
String name;//姓名
int age;//年龄
double salary;//工资
Address address;//地址(属性的类型是Address类型)
public Worker() {
}
public Worker(String name, int age, double salary) { this.name = name;
this.age = age;
this.salary = salary;
}
public void work() { System.out.println("work");
}
public void work(int hours) {
System.out.println("worker works for " + hours + " hours");
}
}
//地址类
class Address {
String address;
String zipCode;
public Address() {
}
public Address(String address, String zipCode) {
this.address = address;
this.zipCode = zipCode;
}
}
复制代码