一、什么是面向对象
面向对象编程
面向对象编程的本质就是:以类的方式组织代码,以对象的形式封装数据
抽象
三大特性:封装、继承、多态、
二、方法回顾
静态方法、动态方法:
引用传递:引用类的传递,叫引用传递
this关键字
三、对象的创建分析
类与对象的关系:类是一种抽象的数据类型,它是对某一类事物整体描述、定义,但不代表某一个具体的事物;对象则是对抽象概念的具体实例,能够体现特点、展现功能,不再是一个抽象的概念。
使用new关键字创建对象
使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。(类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点:1、必须和类的名字相同。2、必须没有返回类型,也不能void)
四、面向对象三大特性
封装
设计程序要追求“高内聚,低耦合”;高内聚:就是类的内部数据操作细节要自己完成,不允许外部干涉;低耦合:就是仅暴露少量方法给外部使用;通常应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
加入get//set方法即可在其他类中调用当前类中的属性,列如:
public class demo14 {
//属性私有,无法直接调用属性
private String name;
private int age;
private char sex;
//提供一些可以操作这个属性的方法(get、set)
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public char getSex() {
return this.sex;
}
//set 给这个数据设置值
public void setName(String name){
this.name=name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(char sex) {
this.sex = sex;
}
}
public class demo15 {
public static void main(String[] args) {
demo14 s1= new demo14();
s1.setName("wsh");
System.out.println(s1.getName());
}
}
继承
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
关键字:extend(是“扩展”的意思)
- 继承是类和类中的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等
- 继承关系的两个类,一个是子类(派生类),一个是父类(基类)。子类继承父类,使用关键字extend来表示
- 子类和父类之间,从意义上讲应该具有“is a”的关系,不同的子类之间还可以抽象,从而形成父类
子类:
package extend;
//家长类 is person
public class Father extends Person{
}
父类:
package extend;
//父类
public class Person {
private int money=110;
public void saa(){
System.out.println("好好学习天天向上");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
测试类:
public class test {
public static void main(String[] args) {
Father father = new Father();
father.saa();
System.out.println(father.getMoney());
}
}
注意:java中只有单继承没有多继承,所有的类都默认直接或间接继承object类
super(私有的东西无法被继承)
子类:
package extend;
//家长类 is person
public class Father extends Person{
private String name ="wamgshihao";
public void test(String name){
System.out.println(this.name);//这个类的name
System.out.println(name);//测试类中的name
System.out.println(super.name);//父类中的name
}
}
父类:
package extend;
//父类
public class Person {
String name ="王仕豪";
}
测试类:
package extend;
public class test {
public static void main(String[] args) {
Father father = new Father();
father.test("wsh");
}
}
- super调用父类的构造方法,必须在构造方法的第一个
- super只出现在子类方法和构造方法中
- super不能与this同时调用构造方法
方法的重写
- 父类的引用指向了子类,所以在测试类中所用的子类new出来的对象,父类也可以用
测试类中:
Father father =new Father();
father.test();
Person person=new Father(); 在静态方法中,子类重写了父类的方法
person.test(); 注意:重写都是方法的重写,与类无关
重写:需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符可以扩大,但不能缩小 (public>Protected>Default>Private)
- 抛出的异常:范围可被缩小但不能被扩大
- 重写的意义:父类的功能子类不一定需要,或者不能一定满足!(重写快捷键 Atl+insert)
多态
可以实现动态编译,类型最终状态只可在最终执行后可确定,让我们的产品可扩展性更强。
多态就是同一方法可以根据发送对象的不同而采用多种不同的行为方式(一个对象的实际类型是确定的,但可以指向队象的引用的类型有很多)
多态存在条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类队象
instanceof关键字来判断两个类之间是否存在父子关系,能否编译通过
System.outprintls(x instanceof y);//判断能否编译通过
五、抽象类和接口
抽象类
- 通过abstract修饰符可以用来修饰方法,也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么类就是抽象类(注意:抽象类中可以没有抽象方法,但是抽象方法中一定要有抽象类的声明)
- 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的
- 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
- 子类实现继承抽象类,那么必须实现父类中的抽象方法,否则也需要声明抽象类
接口
接口的关键类是interface;且都需要实现类来实现接口中的方法
作用:
- 约束
- 定义一些方法让不同的人来实现
- 接口中的所有定义的方法其实都是抽象的public abstract(可以省略不写)
- 接口不可以被实例化,且没有构造方法
- interface可以实现多个接口,但要重写接口中的方法