Java学习笔记(七)------包、访问修饰符、封装、继承、super关键字、方法重写/覆盖、多态

包的本质就是创建不同的文件夹,来保存类文件。 

 语法:package com.name; // package关键字 表示打包。com.name包名。

包的三大作用:

1.区分相同名字的类。

2.当类很多时,可以很好的管理类。[看java  API文档]

3.控制访问范围。

包的命名规范 :

只能包含字母、数字、下划线、小圆点. ,但不能用数字开头,不能是关键字或保留字。

规范

一般是小写字母+小圆点+名称 :com.公司名.项目名.业务模块名        

常用的包

 java.long.*   // 是基本包,默认引用,不需要再引入。

 java.util.*     // 是系统提供的工具包,工具类,使用Scanner

 java.net.*    // 是网络包,网络开发

 java.awt.*    // 是做java的界面开发,GUI

注意事项和使用细节 

1.package的作用是声明当前类所在的包,需要放在类的最上面,一个类中只能有一句package。

2. import指令,放在package的下面,在类定义前面,可以有多句且没有顺序要求。

访问修饰符 

java提供四种访问修饰符,用于控制方法和属性(成员变量)的访问权限:

public:公开级别。对外公开

protected:受保护级别。对子类和同一包中的类公开。

默认级别:没有修饰符号,向同一个包中的类公开。

private:私有级别。只有类本身可以访问,不对外公开。 

修饰符使用注意 

1.修饰符可以用来修饰类中的属性,成员方法以及类。

2.只有默认的和public 才能修饰类。

3.成员方法和属性的访问规则一样。

封装 

封装(encapsulation)就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】,才能对数据进行操作。 

封装的好处

1.可以隐藏实现细节。

2.可以对数据进行验证,保证安全合理。

封装的实现步骤 

1.将属性进行私有化private。

2.提供一个公共的(public)set方法,用于对属性判断并赋值。

public void setXxx(类型 参数名){ //Xxx表示某个属性

                // 加入数据验证的业务逻辑

                属性 = 参数名;}

3.提供一个公共的(public)get方法,用于获取属性的值。

public 数据类型 getXxx(){   // 权限判断,Xxx某个属性

                return xx;} 

如果类中要加上构造器:那么就在构造器中this.setXxx(属性名); 

继承 

 继承可以解决代码复用。当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。

基本语法

class 子类 extends 父类{ } //子类就会自动拥有父类定义的属性和方法。父类又叫超类、基类。子类又叫派生类。

继承的注意事项

1.子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问要通过公共的方法访问。  

2.子类必须调用父类的构造器,完成父类的初始化。

3.当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。

4.如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)

5.super在使用时,需要放在构造器第一行。

6.super()和this()都只能放在构造器第一行, 因此这两个方法不能共存在一个构造器。

7.Object是所有java类的父类

8.父类构造器的调用不限于直接父类!将一直追溯到Object类

9.java只能是单继承机制。子类只能直接继承一个父类。

 super关键字

 super关键字代表父类的引用,用于访问父类的属性、方法、构造器。

1.访问父类的属性,但不能访问父类的private属性

super.属性名;

2.访问父类的方法,但不能访问父类的private方法

super.方法名(参数列表);

3.访问父类的构造器。

super(参数列表);   // 只能放在构造器的第一句,只能出现一句

super使用细节 

1.当父类中和子类中的成员重名时,为了访问父类的成员,必须通过super。如果没有重名使用super、this是一样的效果。 

2.super的访问不限于直接父类,可以顺承查父类的父类。如果多个父类中有重名,则遵循就近原则

super和this的比较 
 方法重写/覆盖

方法覆盖就是子类有一个方法,和父类中的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。

重写的注意事项和使用细节 

1.子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样。

2.子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。 (子类的返回类型 是父类的返回类型的子类。)

3.子类方法不能缩小父类方法的访问权限。

重载和重写的对比 
 多态

 方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

对象的多态 

(重要)

1.一个对象的编译类型和运行类型可以不一致。

2.编译类型在定义对象时,就确定了,不能改变。

3.运行类型是可以变化的。

4.编译类型看定义时 “=”号的左边,运行类型看“=”号的右边。 

Animal animal = new Dog(); // animal编译类型是Animal,运行类型是Dog

animal = new Cat();  // animal的运行类型变成了Cat,编译类型仍然是Animal。

多态注意事项和细节 

多态的前提是:两个对象(类)之间存在继承关系。 

1.向上转型调用方法的规则:

语法:父类类型 引用名 = new 子类类型();

特点:

(1)可以调用父类中的所有成员(需遵守访问权限)。

(2)不能调用子类的特有成员。

(3)因为在编译阶段,能调用哪些成员,是由编译类型来决定的。

(4)最终运行效果看子类(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法,然后调用。

(5)编译类型看左边,引用类型看右边。

2.向下转型

语法:子类类型 引用名 = (子类类型) 父类引用;

(1)只能强转父类的引用,不能强转父类的对象。

(2)要求父类的引用必须指向的是当前目标类型的对象。

(3)当向下转型后,可以调用子类类型中所有的成员。 

3.属性没有重写一说,属性的值看编译类型。(对象的调用看引用类型

4.instanceof比较操作符:用于判断对象的运行类型是不是XX类型或者XX类型的子类型。

java的动态绑定机制(重要) 

 1.当调用对象方法的时候,该方法会和该对象的内存地址/运动类型绑定。

2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。

多态的应用
多态数组 

数组的定义类型为父类类型,里面保存的实际元素类型为子类类型。 

多态参数 

方法定义的形参类型为父类类型,实参类型允许为子类类型。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值