面向对象思想:
面向过程,以函数为基础,关注的是实现过程;
面向对象,以对象为基础,关注的是最终结果;
面向对象思想特点
是一种更符合我们思想习惯的思想
可以将复杂的事情简单化
将我们从执行者变成了指挥者
角色发生了转换
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
其实就是在管理和维护对象之间的关系。
面向对象特征
封装(en psul tion)
继承(inherit ne)
多态(polymorphism)
面向对象(学生类的定义)
案例演示
属性:姓名,年龄,性别
行为:学习,睡觉
class Test_Student {
public static void main(String[] args) {
//创建对象
Student s = new Student();
//对象名.变量名
s.name = "张三";
s.age = 23;
System.out.println(s.name + "..." + s.age);
//使用成员方法
s.study();
s.sleep();
}
}
class Student {
String name; //姓名
int age; //年龄
String gender; //性别
public void study() { //定义学习的方法
System.out.println("学生学习");
}
public void sleep() { //定义睡觉的方法
System.out.println("学生睡觉");
}
}
成员变量和局部变量的区别
class Test_Person {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "张三"; //调用姓名属性并赋值
//p1.age = -17; //调用年龄属性并赋值
//p1.speak();
p1.setAge(-17);
System.out.println(p1.getAge());
}
}
class Person {
String name;
private int age;
public void setAge(int a) {
if (a > 0 && a < 200) {
age = a;
}else {
System.out.println("错误");
}
}
public int getAge() {
return age;
}
public void speak() {
System.out.println(name + "..." + age);
}
}
this关键字特点
代表当前对象的引用(代表本来对象的引用/指代)
this的本质是一个对象
在每一个普通方法里,都有一个this,谁调用这个方法,this就指向谁
构造方法的重载及注意事项
构造方法的重载
重载方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
构造方法注意事项
如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
案例演示
学生类:
成员变量:
name,age
构造方法:
无参,带两个参
成员方法:
getXxx()/setXxx()
show():输出该类的所有成员变量值
给成员变量赋值:
setXxx()方法
构造方法
输出成员变量值的方式:
通过getXxx()分别获取然后拼接
通过调用show()方法搞定
class Demo4_Student {
public static void main(String[] args) {
Student s1 = new Student(); //使用空参构造
s1.setName("张三"); //设置姓名
s1.setAge(23); //设置年龄
System.out.println("我的姓名是:" + s1.getName() + ",我的年龄是:" + s1.getAge());
//getXxx()获取属性值,可以打印,也可以赋值给其他的变量,做其他的操作
Student s2 = new Student("李四",24);
s2.show();
}
}
class Student {
private String name;
private int age;
public Student(){} //空参构造
public Student(String name,int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show() {
System.out.println("我的姓名是:" + name + ",我的年龄是:" + age);
}
}
继承(extens)
让类与类之间产生关系,子父类关系
继承的好处和弊端
继承的好处
提高了代码的复用性
提高了代码的可维护性
让类与类之间产生了关系,是多态的前提
继承的弊端
类的耦合性增强了。
开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
class Test5_Animal {
public static void main(String[] args) {
Cat c1 = new Cat("花",4);
System.out.println(c1.getColor() + "..." + c1.getLeg());
c1.eat();
c1.catchMouse();
Dog d1 = new Dog("黑",2);
System.out.println(d1.getColor() + "..." + d1.getLeg());
d1.eat();
d1.lookHome();
}
}
/*
* A:猫狗案例分析
* B:案例演示
* 猫狗案例继承版
* 属性:毛的颜色,腿的个数
* 行为:吃饭
* 猫特有行为:抓老鼠catchMouse
* 狗特有行为:看家lookHome
*/
class Animal {
private String color; //毛的颜色
private int leg; //腿的个数
public Animal(){}
public Animal(String color,int leg) {
this.color = color;
this.leg = leg;
}
public void setColor(String color) { //设置颜色
this.color = color;
}
public String getColor() { //获取颜色
return color;
}
public void setLeg(int leg) { //设置腿的个数
this.leg = leg;
}
public int getLeg() { //获取腿的个数
return leg;
}
public void eat() { //吃饭
System.out.println("吃饭");
}
}
class Cat extends Animal {
public Cat() {} //空参构造
public Cat(String color,int leg) { //有参构造
super(color,leg);
}
public void eat() { //吃鱼
System.out.println("猫吃鱼");
}
public void catchMouse() { //抓老鼠
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public Dog() {} //空参构造
public Dog(String color,int leg) { //有参构造
super(color,leg);
}
public void eat() { //吃肉
System.out.println("狗吃肉");
}
public void lookHome() { //看家
System.out.println("看家");
}
}