Javaの语言基础【四】

目录:
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){}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容