Java 面向对象

JAVA继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
在 JAVA 中,类的继承是单一的,就是说,一个子类只能有一个父类,而一个父类可以对应多个子类。JAVA 不支持多继承,但支持多重继承。

示例代码:

// animal 父类
public class animal {
    public int age;
    public String name;

    public animal(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public void eat() {
        System.out.println(this.name + " is eating");
    }

}

// dog 子类
public class dog extends animal{
    public dog(int age, String name) {
        super(age, name);
    }

// 重写父类方法
    @Override
    public void eat() {
        System.out.println("The dog is eating.");
    }
}

// bird 子类
public class bird extends animal{
    public bird(int age, String name) {
        super(age, name);
    }

// 子类中特有的方法
    public void fly() {
        System.out.println(this.name + " is flying.");
    }
}

JAVA重写(Override)与重载(Overload)

  • 重写(Override):
    当一个类继承另一个类时,则可以拥有父类的成员方法和成员变量,在子类中,可以创建独有的成员,如果创建了一个与父类中相同名称,相同返回类型、相同参数列表的方法,只是方法体中的实现方法不同,以实现不同于父类的功能,这种方式就称为方法的重写。

重写方法时,应该遵循以下规则:

  • 参数列表必须完全与被重写方法的相同。
  • 返回类型必须完全与被重写方法的返回类型相同。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。

示例代码请看继承部分

  • 重载(Overload)
    方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同的定义,返回值类型可以相同可以不同,可以有不同的访问修饰符,可以抛出不同的异常。调用方法时通过传递给它们的不同参数来决定具体使用哪个方法。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

重载方法时,应该遵循以下规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样)。
  • 被重载的方法可以改变返回类型。
  • 被重载的方法可以改变访问修饰符。
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

示例代码:

public class Overloading {
    // 无参数
    public void test() {
        System.out.println("test1");
    }
    // 有一个参数
    @Overload
    public void test(int a) {
        System.out.println("test2");
    }
    // 有两个参数
    @Overload
    public void test(int a, String s) {
        System.out.println("test3");
    }
    // 参数顺序改变
    @Overload
    public void test(String s, int a) {
        System.out.println("test4");
    }
}
  • 重写(Override)与重载(Overload)的区别
    方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在同一个类或子类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能抛出新的强制性异常,或者比被父类声明的更广泛的强制性异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

JAVA封装

JAVA中的封装是将类的某些信息隐藏在类的内部,不允许外部程序直接访问。要想对隐藏信息进行操作和访问,需要通过该类中提供的方法来实现。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

封装的优点:

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

封装的实现:

  • 通过 private修饰符来改变属性的可见性,使属性只能在类内部访问。
  • 对每个值属性提供对外的公共方法getter/setter,用于对私有属性进行取值和赋值操作。

示例代码:

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

推荐阅读更多精彩内容

  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 653评论 0 1
  • 标签(空格分隔): Java面向对象 1. 面向对象的特征有哪些方面? 抽象:抽象就是找出一些事物的相似和共性之处...
    outSiderYN阅读 6,323评论 0 6
  • 目录介绍 2.0.0.1 重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写? 2.0.0...
    杨充211阅读 360评论 0 1
  • 哈夫曼树,用优先队列实现就可以了 每次选出的两个最小的取平均一定是这个序列中最小的,因为这个平均在最小的两个数之间...
    DaiMorph阅读 319评论 0 0
  • 不知道多少人能说自己大学四年过成了自己想要的模样,本科毕业半年多,如果用一句话评价我自己的本科四年,那就是“除了保...
    弄波阅读 649评论 18 28