美文网首页Java面试
Javaの语言基础【四】

Javaの语言基础【四】

作者: 耑意儿 | 来源:发表于2018-03-28 17:05 被阅读12次
    目录:
    1、面向对象
    2、面向对象三大特性
    3、this和super
    4、内部类
    5、抽象类
    6、接口
    7、代码块
    

    进击的小仙

    1. 面向对象

    面向对象相对于面向过程,面向过程是你要解决一个问题,于是你制定了一系列流程,先做什么,接着做什么,一步步来解决这个问题,而面向对象则是你要解决一个问题,然后你制定一件东西做这件事,再做另一件东西做另一件事,然后这些东西相互配合操作。
    就好比如说你和你男朋友,你想喝红枣银耳汤,你找到你男友让他来解决你这个需求,你男友要让你喝上银耳汤,首先得有炖锅,他先在京东挑了一个炖锅,有了炖锅之后还要有食材,于是他又去超市买银耳、红枣、冰糖等材料,之后他还要泡发银耳,清洗炖锅,最后他开始炖银耳汤,然后端来给你喝。在这一整个过程中,你找男友来解决,这是面向对象;你男友解决你要喝银耳汤的这个需求则是通过面向过程来实现的。

    所以说,面向对象就是,找对象、创建对象、使用对象并维护对象之间的关系

    • 类 :对现实中事物的描述 ,就是以.class结尾的文件
    • 对象 : 实实在在存在的事物 ,就是new 出来的对象

    2、面向对象三大特性

    面向对象的三大特性:封装、继承、多态

    2.1、 封装 :

    将类中数据和功能隐藏起来,不允许对象直接访问。但对外会提供一定的访问方式,可以定义抽象类或私有化构造函数。

    2.2、继承:

    在已有数据功能的基础上,定义一个新类,从而实现功能扩展,子类不能选择性地继承父类的部分内容。

    2.3、多态:

    java程序运行时,相同的数据可能赋给不同类型的对象。不同对象会调用不同的方法,产生不同的运行效果,由此产生多态。
    子父类的相互转换:
    子类 --> 父类:向上转型
    父类 --> 子类:向下转型

    public class Test {
        public static void main(String[] args) {
          putOnSale(new Food());  // 以 Food 对象调用 putOnSale 方法
          putOnSale(new MemberCard());  // 以 MemberCard 对象调用 putOnSale 方法
                    
          Goods goods = new Food();  // 向上转型  
          goods.showGoodsInfo();               // 调用的是 Food 的 showGoodsInfo
          Food food = (Food)goods;        // 向下转型  
          food.onSale();        // 调用的是 Food 的 onSale
      }  
        // 货品上架
        public static void putOnSale(Goods g)  {
          g.showGoodsInfo();  
            // 类型判断
            if (g instanceof Food)  {  // 食品类上架 
                Food food = (Food)g;  
                food.onSale();  
            } else if (g instanceof MemberCard) { // 会员卡类上架 
                MemberCard memberCard = (MemberCard)g;  
                memberCard.onSale();  
            }  
        }  
    }
    
    class Goods{
       String name;
       double price;
       public void showGoodsInfo(){
          syso("name:"+name + "price: ¥"+price);
       }
    }
    
    class Food extends Goods{
        public void putOnSale(){
            syso("食品,上架");
        }
    }
    
    class MemberCard extends Goods{
        public void putOnSale(){
            syso("会员卡,上架");
        }
    }
    
    

    3.this和super

    • this :代表当前活动的类
      this.成员变量
      this.成员方法
      this([参数列表]) // 构造方法
    • super :代表当前活动类的父类
      super.变量
      super.方法
      super([参数列表]) // 父类的构造函数

    4.内部类

    内部类可以分为静态内部类、非静态内部类、局部内部类和匿名内部类

    • 静态内部类
      可通过本类直接调用,不需要创建对象,只能访问外部类的静态成员
    • 非静态内部类
      不允许定义静态成员
    • 局部内部类(定义在方法中的内部类)
      不能使用静态修饰符和访问修饰符修饰
      不能再外部类以外的部分使用
      只能访问方法中的常量
    • 匿名内部类
      使用一次即刻消亡

    5. 抽象类

    抽象类是被abstract修饰的类,可含有抽象方法和非抽象方法。抽象类必须被继承否则无存在的意义。
    继承类要重写所有的抽象方法,否则该子类还是抽象类,而且该子类必须定义成抽象类。

    6. 接口

    所有方法都被抽象关键字abstract修饰,实现接口(implements)的类必须实现接口的所有方法,支持多实现
    接口只能被接口继承
    java支持多继承,这一点只体现在接口上,一个类可以实现多个接口,但是只能继承一个类,不能继承多个类。

    • 特点
      接口是对外暴露的规则
      接口是程序的功能扩展,降低耦合性
      可用来多实现
      类与接口之间是实现关系,而且类可以多实现
      接口与接口之间可以继承,而且可以多继承。

    7、代码块

    7.1、静态代码块

    static { 操作语句 } 静态代码块随着类的加载而加载

    7.2、构造函数代码块

    在类上,随着对象的加载而加载

    class Persion{
          public Persion(){  操作语句  }
    }
    

    7.3、普通代码块

    在方法内部,随着方法的调用而加载,也叫局部代码块。
    局部代码块可以限制变量的生命周期,也就是说在代码块中创建的变量只在代码块中有效,当代码块运行结束,变量就会被释放,从而节省内存空间。

    public void work(){
        {  操作语句 }
    }
    

    使用过程中要注意下面的两种情况:

    // 报错:
    void method() {
        int age = 10;
        {
            int age = 100;        //此处报错[Duplicate local variable age];去掉前面的int类型声明即可
        }
        System.out.println("age = " + age);
    }
    // 不报错
    void method() {
        {
            int age = 100;
        }
        int age = 10;
        System.out.println("age = " + age);
    }
    

    7.4、操作顺序

    优先执行顺序是静态代码块 > main()方法 > 构造代码块 > 构造方法。
    优先级是父类静态代码块 > 子类静态代码块 > 父类构造代码块 > 父类构造方法 > 子类构造代码块 > 子类构造方法。

    7.5、同步代码块

    同步代码块,用于解决线程同步问题。

    //下列两个方法有什么区别
    // 同步方法
    public synchronized void method1(){}
    
    // 同步代码块
    public void method2(){
     synchronized  (obj){}
    }
    

    相关文章

      网友评论

        本文标题:Javaの语言基础【四】

        本文链接:https://www.haomeiwen.com/subject/vmuscftx.html