☕️Java基础(方法 继承 多态)

前言:前面我们了解了C语言,是一门面向过程的语言;现在我们进入Java学习,这是一门面向对象的程序的语言,在C语言的基础之上增添了许多更便利的方法。

面向对象的特征有哪些呢?

  • 封装:将对象属性和方法的代码封装到一个模块中,也就是一个类中,保证软件内部具有优良的模块性的基础,实现“高内聚,低耦合”。
  • 抽象:找出一些事物的相似和共性之处,然后归为一个类,该类只考虑事物的相似和共性之处。抽象包括行为抽象和状态抽象。
  • 继承:在已经存在的类的基础上进行,将其定义的内容作为自己的内容,并可以加入新的内容或者修改原来的方法适合特殊的需要。
  • 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,就是多态,简单点说:就是用父类的引用指向子类的对象。目的:提高代码复用性,解决项目中紧耦合问题,提高可扩展性。
  • 多态的机制:靠的是父类的或者接口的引用变量可以指向子类或者具体实现类的实例对象。

下面我们来进行介绍

目录:

  • 一、类与对象
  • 二、方法
  • 三、继承
  • 四、多态

一、类与对象

描述一种东西需要太多太多词汇,为了方便描述,所以把这些词汇放在一起; 这种东西叫做类,这种东西里面的个体叫做对象,描述个体的词汇叫做属性;

1.类

类:把众多是事物归纳、划分成一些是人类在认识客观世界时经常采用的思维方式。分类的原则是抽象的。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如同模具与铸件的关系,类的实例化的结果是对象,而对一类对象的抽象就是类。

2.对象

对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。对象由属性和对属性进行操作的一组服务组成。

3.类与对象的关系

对象是类实例化出来的,对象中含有类的属性,类是对象的抽象;
举例:人类 -> 马云 那么马云即为人类这个类里面的一个对象;人类有许许多多的属性,如性别、年龄、财产... 这些都是人类这个类里面的属性,而马云性别男,年龄56,财产百亿就是这个属性的具体化;

4.代码表示
//University 大学类
public class University {
    public String University_Name; //校名属性
    public String Admitted_Score;  //录取分数属性
    public String Province;  //所在省份属性

    public University(String university_Name, String admitted_Score, String province) {
        University_Name = university_Name;
        Admitted_Score = admitted_Score;
        Province = province;
    }
}

//大学类里面的一个对象  西南大学SWU
public class SWU {
    University SWU = new University("西南大学","620","重庆");
}
类与对象包内位置展示.png

二、方法(杂)

1.对对象属性赋值的方式
  a.对于public修饰的属性使用对象直接使用
  b.对于private修饰的属性不能直接使用只能间接作用
2.类方法与对象方法

Java是面向对象的语言 一切皆对象 类,Java里面方法是不能独立存在的
类方法 = 静态方法
对象方法 = 实例方法

  • 区别
    定义区别 -> 静态方法 使用static修饰
    意义区别 :
    静态方法:依附于类本身,比实例方法优先加载,只能用这个类来调用当这个类被加载到内存中,这个方法就被加载了,而此时对象还不存在 所以只能用这个类来调用静态方法
    对象方法:依附于对象,必须创建这个类的一个对象,用对象来调用
    static可以修饰以下内容
    - 变量 静态变量
    - 方法 静态方法
    - 类(内部类) 静态内部类

    Java参数传递机制:值传递(传递过去的是当前变量的一份拷贝)

3.构造方法与方法重载
  • 构造方法:如何去创建一个对象
    系统默认提供一个无参的构造方法
public class University {
    public String University_Name;
    public int Admitted_Score;
    public String Province;

    public  University(){  //默认构造 构造初始数据
        University_Name = "xx";
        Admitted_Score = 111;
        Province = "北京";
    }
    public University(String university_Name, int admitted_Score, String province) {  //自定义构造
        University_Name = university_Name;
        Admitted_Score = admitted_Score;
        Province = province;
    }
}

1.默认构造方法(构造一个对象,属性为默认构造的数据)

public class BD {
    public static void main(String[] args){
        University BD = new University();
        System.out.println(BD.Admitted_Score);
    }
}
类的默认构造输出.png

2.自定义构造

public class SWU {
    public static void main(String[] args){
        University SWU = new University("西南大学",620,"重庆");
        System.out.println(SWU.University_Name+SWU.Admitted_Score+SWU.Province);   
    }
}
自定义构造输出结果.png

方法重载

同一个类里面 方法名相同 参数一定不同
方法的重载和返回值 修饰符 没有关系

public class Car {
    public int WheelCount;
    public int Engine;
    public int Seat;

//在同一个 Car 类, 方法名都为Car,但里面参数不同 这就是Car方法重载
    public Car(){

    }

    public Car(int cWheel, int cEngine, int cSeat){
        WheelCount = cWheel;
        Engine = cEngine;
        Seat = cSeat;
    }
}

特点:方法名和类名相同 没有返回值
解决两个问题:让代码更简洁 在数据使用时能保证有数据

对象方法与静态方法
set与get方法

用于private修饰属性的调用 用ALT+INSERT键快速调用(Windows) Ctrl+ENTER(MacOS)


三、继承

什么是继承呢,可以凭字面意思理解,通俗的将就是平时生活中的继承 爸爸继承爷爷,儿子继承爸爸;继承了些什么呢,为人处事的方法,财产,人脉关系;在JAVA中只不过是继承东西的名字变了而已,下面我们进行了解。

1.为什么要用到继承

继承有许多好处,我们再从字面意思上理解,人为什么要继承,因为父辈已经有的东西为什么不要而去重新打拼呢?在Java里这样理解,已经写好了一个类A,我们要另起一个类B,但这B的大部分功能就是A,为什么不在A的基础上进行编写B呢,那么就可以将B继承于A。这样可以很大程度上减轻代码的臃肿性,对应代码编写原则:高内聚

2.继承的格式
class 父类 {
}
 
class 子类 extends 父类 {
}
3.继承的类型
继承类型.png
4.继承的特点

①.子类拥有父类非 private 的属性、方法。
②.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
③.子类可以用自己的方式实现父类的方法。
④.Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如
⑤.A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继
⑥.承区别于 C++ 继承的一个特性。
⑦.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

5.重写

若子类中需要的方法与父类冲突则需要进行重写
@override 父类Car与子类BMW演示 将drive方法重写

public class Car {
    public int wheel;
    public String color;
    public String brand;

    public Car(int wheels){
        //System.out.println("Car类构造方法");
        this.wheel = wheels;
        drive();
    }
    protected void drive() {
        System.out.println("color:"+color);
    }
}
public class BMW extends Car{
    public BMW(int wheels) {
        super(wheels);
    }

    @Override
    protected void drive() {
        System.out.println("开宝马舒适");
    }

    public void test(){
        System.out.println("宝马贵");
    }
}
  • 输出结果为 “开宝马舒适” 而不是 “color:颜色” 重写成功
  • 重写要点

两同:方法名相同 参数相同
两小:子类的返回值必须比父类的想用或更小 子类抛出的一场必须比父类抛出的要小
一大:子类的修饰符要比父类更大或者相同

6.继承关键字
  • 1.extends关键字
    在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
public class Animal { 
    private String name;   
    private int id; 
    public Animal(String myName, String myid) { 
        //初始化属性值
    } 
    public void eat() {  //吃东西方法的具体实现  } 
    public void sleep() { //睡觉方法的具体实现  } 
} 
 
public class Penguin  extends  Animal{ 
}
  • 2.super与this
    super关键字:实现对父类成员的访问,用来引用当前对象的父类。
    this关键字:指向自己的引用。
  • 3.final关键字
    final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写.
  • 7.继承注意事项

①.尽量让属性的修饰符为private
②.尽量让属性的修饰符为private 或者 final ->表示这是一个常量 不能被更改 通常用大写字母表示
③.尽量不要在父类的构造方法里面调用可能被子类重写的方法

四、多态

  • 关键字 goToWork
    将同一个事件的不同方法集合在一起,不用繁琐创建子类 一个goToWork搞定;
public class Father {
    public void goToWork(Car car){  
        car.drive();

        //判断某个类是不是一个类
        if(car instanceof BMW){
            BMW bmw = (BMW)car;  //多态  强制转化为对应的子类对象
            bmw.test();
        }

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

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,650评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,222评论 0 2
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,143评论 0 2
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 464评论 0 2
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,595评论 4 12