JAVA学习-面向对象相关知识

面向对象的基本概念,包括:
    类
    实例
    方法
面向对象的实现方式,包括:
    继承
    多态
Java语言本身提供的机制,包括:
    package
    classpath
    jar
以及Java标准库提供的核心类,包括:
    字符串
    包装类型
    javaBean
    枚举
    常用工具类

类:


定义了class,只是定义了对象模版,而要根据对象模版创建出真正的对象实例,必须用new操作符。
new操作符可以创建一个实例,然后,我们需要定义一个引用类型的变量来指向这个实例:
Person p = new Person();
一个Java源文件可以包含多个类的定义,但只能定义一个public类,且public类名必须与文件名一致。
如果要定义多个public类,必须拆到多个Java源文件中。
面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据。
构造器:
    相当于构造函数。一旦有了有参构造,无参构造就必须显示定义。
alt+insert快捷键可以帮助生成构造器、get,set等


封装:


    程序追求”高内聚,低耦合“。高内聚:类的内部数据操作细节自己完成,不允许外部干涉,
                           低耦合:仅暴漏少量的方法给外部使用。
    属性私有,通过get set方法来操作属性。


继承:


    public class Person{}
    public class Student extends Person{}
    在java中所有的类都默认直接或间接继承Object类
    快捷键ctrl+h可以查看继承的关系
    super:可以在子类中调用父类的属性和方法(私有的不能调用),当new子类时,会自动调用父类的无参构造方法
    super注意点:1.super调用父类的构造方法,必须在构造方法的第一个。
    方法的重写:重写只和非静态方法有关,需要有继承关系,子类重写父类的方法、
        1.方法名必须相同,方法体不同
        2.参数列表必须相同
        3.修饰符:范围可以扩大 private->public
        4.抛出的异常,范围可以缩小不可以扩大。           
    为什么重写:
        1.父类的功能,子类不一定需要或者不一定满足。


多态:


    多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
    Person s1 = new Student;
    Student s2=new Student;
    s1.run();
    s2.run();
    一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。
        多态存在的条件:
    1.有继承关系
    2.子类重写父类方法
    3.父类引用指向子类对象
    注意:当子类重写父类方法时,调用子类重写的方法,父类的引用指向子类的对象s1不能够调用子类特有的方法。
              但可以通过强制转换类型实现。
instanceof
    判断类型是否有父子关系
    Person p1 = new Student();
    System.out.println(p1 instanceof Student);//true
    System.out.println(p1 instanceof Person);//true
    System.out.println(p1 instanceof Tercher);//false
    System.out.println(X instanceof Y);//编译能不能通过看X和Y有没有父子关系,返回true和false       看X和Y是否在父子类一条线上。
父类子类类型转换:
    高转低要强制转换:
        Person p1=  new Student();//现在p1为Person类不能够调用Student类中的方法
        Student p2 = (Student)p1;//p1被转为Student类,用p2引用接收。


抽象类:


    抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。
    如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法。
    抽象类的所有方法,子类都必须要重写(子类也为抽象类除外)。
    1.不能new抽象类。
    2.抽象类可以写普通方法,抽象方法必须写在抽象类中。

接口:


    只有规范。比抽象类还要抽象。定义的方法默认就是public static,定义的属性默认就是常量 public static final
    接口的定义:public interface UserService{}    //关键字interface 
    类继承接口的定义:public class UserServiceImpl implements     UserService{}    //关键字implements
    可以通过接口实现多继承。
    一个interface可以继承自另一个interface。interface继承自interface使用extends,它相当于扩展了接口的方法。
    合理设计interface和abstract class的继承关系,可以充分复用代码。一般来说,公共逻辑适合放在abstract class中,
    具体逻辑放到各个子类,而接口层次代表抽象程度。
       default方法:
    当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,
    只需要在需要覆写的地方去覆写新增方法。


内部类:


    一个java文件里只能有一个public类,但可以有很多个class。
            成员内部类
    在一个类中再写一个类。实例化是通过外部类来实现实例化, Outer.Inner innner = Outer.new Inner();
    内部类可以获取外部类的私有属性。它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。
           静态内部类:
    没办法直接访问外部类的非静态属性,因为在加载类的时候先加载静态内容,在加载静态内部类的时候还没有定义识别到外部类的非静态属性。
           局部内部类
    写在方法里面的类(匿名类(Anonymous Class))
             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值