栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java第四周学习笔记:

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java第四周学习笔记:

1.继承

1)概念:

将多个类的共性内容抽取出来,放在一个单独类中,让这一个类和多个类产生一种关系"继承".

2)特点:

1)在Java语言中;类与类之间的继承关系,只支持单继承.
2)虽然类与类之间只支持单继承,但是可以多层继承.

3)格式:

 class 父类名{
​
}
   class  子类名  extends  父类名{
​
}

4)好处:

1)提高代码的复用性.
​
2)调高代码的维护性格.
​
3)类与类产生这种关系"继承",是多态的前提条件.

5)加入继承后的成员变量的访问问题:

情况1:
   					子类继承父类,子类的成员变量名称和父类的成员变量名称不一致的情况:很简单,分别调用即可!
 class Fu2{
 //父类的成员变量
 int num = 100 ;
 }
//定义一个子类
class Zi2 extends  Fu2{
    //子类的成员变量名称和父类的成员变量名称不一致
    int num2 = 200 ;
}
//测试类
public class ExtendsDemo2 {
    public static void main(String[] args) {
        //创建子类对象 
        //情况1:
        Zi2 zi  = new Zi2() ;
        System.out.println(zi.num);
        System.out.println(zi.num2);
    }
}
 *   情况2:
 *      子类继承父类,子类的成员变量名称和父类的成员变量名称一致的情况:
                                           
                         *              一句话:遵循 "就近原则"
                         *            1)现在子类的局部位置中找,如果存在,就使用
                         *            2)如果不存在,那么就在子类的成员位置中找,如果存在,就使用
                         *            3)如果子类的成员位置中不存在,那么就在父类的成员位置中找,如果存在,就使用;
                         *            4)如果父类的成员位置中不存在,那么就报错了,压根不存在这个变量
class Fu2{
    //父类的成员变量
    int num = 100 ;
}
//定义一个子类
class Zi2 extends  Fu2{
    //成员方法
    public void show(){
        //子类的局部位置
        int num = 30 ;
        System.out.println(num) ;
    }
}
//测试类
public class ExtendsDemo2 {
    public static void main(String[] args) {
       //情况2:
        //创建子类对象
        Zi2 zi = new Zi2() ;
        zi.show() ;
    }
}

6)注意事项:

最基本的注意事项:

1)子类继承父类,只能继承父类非私有的成员,私有的成员可以间接通过公共访问访问!

因为私有成员,只能在本类访问,外界类不能访问!

 class Fu{
    //父类有两个成员:公共的/私有的
    public int num =  40 ;
    private int num2 = 100 ;
    //提供一个公共的成员方法
    public void method(){
        System.out.println(num2);
    }
    //私有的成员方法
    private void function(){
        System.out.println("function Fu...");
    }
    //公共的方法
    public void function2(){
        function();
    }
}
//子类
class Zi extends  Fu{
    //定义一个成员方法
    public void show(){
        //展示数据
        System.out.println(num);
       // System.out.println(num2);//num2变量私有的
    }
}
//测试类
public class ExtendsDemo1 {
    public static void main(String[] args) {
        //创建子类对象
        Zi z = new Zi() ;
        z.show() ;
        z.method();
        //z.function() ;//function方法 private 修饰了
        z.function2();
    }
}
     

2)子类继承父类,不能继承父类的构造方法,但是可以通过super访问(super重点关键字)

如何访问:
 *              子类的所有构造方法都要(默认)访问父类的无参构造方法
 *              因为存在继承关系,子类的构造方法可能会用到父类的数据,所以需要让父类先初始化(构造方法),然后子类在进行初始化
 *              ---->分层初始化
 *
 *              在子类的所有构造方法中第一句话:super() ; 访问父类的无参构造方法

//定义一个父类
class Fu {
    //先提供父类的无参构造方法
    public Fu(){
        System.out.println("Fu的无参构造方法...") ;
    }
}

//定义一个子类
class Zi extends Fu{
    //子类的无参构造方法
    public Zi(){
        //super(); //可以省略不写,默认的!
        System.out.println("Zi的无参构造方法...") ;
    }

    //提供子类的有参构造方法
    public Zi(String name){
        //super() ;//可以省略不写,默认的!
        System.out.println("Zi的有参构造方法...");
    }
}
//测试类
public class ExtendsDemo1{
    public static void main(String[] args) {
        //创建子类对象
        Zi zi = new Zi() ;
        System.out.println("----------------------------") ;
        Zi zi2 = new Zi("hello") ;
    }
}

结果:
Fu的无参构造方法...
Zi的无参构造方法...
----------------------------
Fu的无参构造方法...
Zi的有参构造方法...

2)this和super的区别

*  super:代表父类的空间标识(父类对象的地址值引用)
 * this:代表当前类对象的地址值引用
 *
 * 访问区别
 *     访问成员变量:
 *             this.变量名 :访问当前类的成员变量
 *             super.变量名;访问的父类的成员变量
 *
 *     访问构造方法:
 *             this() ;  访问当前类的无参构造方法
 *             super() ; 访问的是父类的无参构造方法
 *
 *             this(xx) ;  访问的是当前类的有参构造方法
 *             super(xx) ; 访问的是父类的有参构造方法
 *
 *      访问成员方法
 *             this.方法名() ; 访问的是当前类的成员方法
 *             super.方法名() ;访问的是父类的成员方法

3)final关键字:

a)概念:

最终的,无法更改的(状态修饰符)

b)案例:


需求:
 *      有一个父类,父类中有一个show方法,子类继承父类,将show方法进行复写(重写)
 *但是有的时候,父类的功能不能让子类覆盖,Java提供了关键字:final

 */
//父类
class Fu{
    public final void show(){
        System.out.println("这是一个绝密文件,任何不得更改...") ;
    }
}
//子类
class Zi extends Fu{
    //重写
    
}
//测试类
public class FinalDemo {
    public static void main(String[] args) {
        //创建子类对象
        Zi zi = new Zi() ;
        zi.show() ;
    }
}

3)特点:

*      1)可以修饰类,该类不能被继承,它不能在进行扩展了...
 *              举例:后面常用类中重要的类String:  被final修饰
 *      2)可以修饰变量,此时这个变量是一个常量:自定义常量
 *
 *      3)可以修饰成员方法,此时这个方法不能被重写
 
 
 ***了解***
 
    final的应用场景 (扩展)
 *              自定义常量使用居多;
 *              final会结合static一块使用(static修饰:可以类名直接调用)
 *
 *              public static final int num = 100 ; //修饰基本数据类型   :编译时期常量 (Jvm不需要加载)
 *
 *              //Integer:int类型的包装类类型(引用类型)
 *              public static final Integer i = new Integer() ;//修饰的引用数据类型  :运行时期常量(JVM需要加载类)
 *
 *

4)注意****

被final修饰的变量:只能赋值一次,不能在赋值!常量,常驻内存.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号