美文网首页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