Java—子类、继承与抽象

目录

一、子类与父类                     

1、子类与继承      

2、子类与对象     

3、隐藏 

二、关键字

    1、super  

    2、final      

三、对象的上转型对象

四、abstract类与abstract方法

1、abstract方法

2、abstract类 


一、子类与父类                     

object类是所有类的祖先类。

1、子类与继承      

                              (1)关键字:extends     class 子类名 extends 父类名{···}

                              (2)继承特性:java不支持多继承,一个子类只能有一个父类

                                                  同一包中:不继承private修饰的成员变量与方法

                                                  不同包中:只继承protectedpublic访问权限的成员方法

                             (3)子类继承的方法只能操作子类继承和隐藏的成员变量

2、子类与对象     

                        (1) 使用子类的构造方法创建一个子类对象时

                                             ①  子类中声明的成员变量会被分配内存空间

                                             ②  父类的成员变量也都分配内存空间

                                             ③仅父类中可被继承的变量作为分配给子类对象的变量

                          子类不继承父类的构造方法,只能用super关键字调用

                         (2) instanceof运算符

                                  A instanceof B;(对象A属于B,则返回true

3、隐藏 

               (1)变量的隐藏:

                       子类声明的成员变量名与父类同名时(不考虑类型),子类 就会隐藏所继承的(属于父类)成员变量

               (2) 方法的隐藏:(重写

                        如果子类可以继承父类的某个方法,则子类也可以重写这个方法。

                        重写规则:相同:方法名、参数个数与类型完全相同

                                         不同:方法体不同

                       重写父类的方法是访问权限不允许降低,只许提升。

二、关键字

    1、super  

                   (1)子类隐藏的成员变量、方法归super所拥有

                                  super.变量  (隐藏的变量) 
                                  super.方法   (该方法体中只能出现子类隐藏的或继承的变量)
   
                    (2) 调用父类的构造方 当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的构造方法。如果子类的构造方法没有明显的指明调用父类那个构造方法,就认为是调用默认的。

                      在子类的构造方法中用super()调用父类的构造方法。

                     必须是该方法中的第一条语句。

                     super()调用构造方法时先是父类的,再是其他类的,最后自己的。

   2、final      

final可修饰类,成员变量,方法中的局部变量

               用final修饰一个类:final类不能被继承,既没有子类

               用final修饰父类中一个方法,那么这个方法不能被继承。

               用final修饰成员变量或局部变量:变成常量。(常量在运行期间不能发生变化,必须有初值)

三、对象的上转型对象

1、声明      

 class father{}     class son extend father{}

                    (1)father f;

                             f=new son();    //把子类创建的对象的引用放入父类的对象中

                      (2) father f;

                           son s=new son();

                           f=s;                    //把子类创建的对象的引用放入父类的对象中

2、 特点
  1. 上转型对象不能操作自子类新增的成员变量与方法。
  2. 上转型对象可以访问子类继承的或隐藏的成员变量。
  3. 上转型对象可以调用子类继承的方法或重写的实例方法
3、 注意
对于子类重写的

                        实例方法:上转型对象调用的是子类重写的那个。

                        静态方法:上转型对象调用的是父类中的那个。

四、abstract类与abstract方法

1、abstract方法

  • 用abstract修饰的方法称为abstract方法(抽象方法)
  • 只允许声明不允许实现,即方法体为空     :             abstract int a(int x);  //没有方法体和{}
  • 不允许用final和abstract同时修饰一个方法
  • 不允许static修饰abstract方法

2、abstract类 

  • 用abstract修饰的类称为abstract类(抽象类)
  • abstract类不能用new运算符创建对象
  • abstract类的子类

                                 非abstract类:必须重写父类的abstract方法(去掉abstract修饰,并给出具体的方法体)

                                 是abstract类:可以重写或继承父类的abstract方法

  • 可做上转型对象
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,类与继承-抽象类有以下几个关键点。首先,继承是指一个类可以继承自另一个类。被继承的类被称为父类/超类/基类,而继承其他类的类被称为子类继承使得子类可以拥有父类中所有的成员(成员变量和成员方法),从而提高了代码的复用性。 其次,当子类继承自一个抽象类时,子类必须重写父类所有的抽象方法,否则该子类也必须声明为抽象类。最终,必须有子类实现该父类抽象方法,否则从最初的父类到最终的子类都不能创建对象,失去了继承的意义。 一个示例代码如下: ``` public abstract class Animal { public abstract void run(); } public class Cat extends Animal { public void run() { System.out.println("小猫在墙头走~~~"); } } public class CatTest { public static void main(String[] args) { Cat c = new Cat(); c.run(); } } ``` 在上述代码中,Animal是一个抽象类,其中定义了一个抽象方法run。Cat类继承自Animal类,并且重写了run方法。在CatTest类的main方法中,创建了一个Cat对象并调用了run方法。 更多关于Java类与继承-抽象类的知识,可以参考Java基础教程之接口的继承抽象类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java面向对象基础——继承抽象类](https://blog.csdn.net/qq_42538127/article/details/115426682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【JavaSe】面向对象篇(六) 抽象类](https://blog.csdn.net/qq_41744145/article/details/100023046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java基础教程之接口的继承抽象类](https://download.csdn.net/download/weixin_38516270/12808613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值