子类和父类的关系

在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类。子类可以通过extends关键字来继承父类。做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有一个亲生父亲。

1.继承以及重写:子类继承父类是对父类属性和方法的全面继承,同时子类在继承了父类的方法后,可对父类的方法进行重写。

public class Son extends Fat{
private int b;
private String h1;
public void sss() {
System.out.println("我要学好英语"); //在这我们对父类中的sss()方法进行了重写
}
public void iii() {
System.out.println("今天天气真好"); // 在这我们添加了子类特有的方法
}

}
class Fat{
public int a=5;
private String h;
public void sss() {
System.out.println("我要学好java");
}

}

2.父类用作对象的声明类型,构造器用子类的构造器(有点类似于接口和实现类的对象的关系)。这样使得我们的应用场景和范围更为灵活和广泛。我们知道一个父类可以有多个子类,这样我们可以在声明的时候用父类,在具体的构造器时,我们用子类。这时,这个新生成的对象是父类类型的对象,也就是说这个对象中目前只有父类的属性和方法(如果子类重写,则用子类重写的方法)。如果我们需要调用子类中特有的方法和属性,则我们需要将该对象强制转换成子类类型的对象。看下面代码

public class TestSon {
public static void main(String[] args) {
Fat s=new Son(); //我们在这进行了父类用作对象的声明类型,构造器用子类的构造器。
s.sss(); //我们调用了对象中的sss()方法,为我们重写过的方法
System.out.println(s.a); // 我们展示了父类中属性a的值,此处为public(没有进行封装)
Son y=(Son)s; //将s对象转化为Son类型的y对象
y.iii();; //这样我们可以通过y对象来调用子类中特有的iii()方法。
int u=y.b; //同时我们也可以接受子类中特有的属性b。

}

}

对这个知识点的理解和记忆中,我们可以用七个葫芦娃和葫芦娃爸爸(我假设的)来理解。假设葫芦娃爸爸只有吃饭这一个技能包,七个葫芦娃的技能点儿除了吃饭之外,分别还有比如喷火、喷火等技能包(每个人都不一样)。故我们可以在用某一个对象时,可以先以葫芦娃爸爸作为声明类型,然后呢用具体的葫芦娃进行构造。当我们在表达吃饭的动作(每个小葫芦娃都要吃饭啊~~~)时,我们就可以用当前对象名,吃饭(方法)来表示。但是当需要用喷火(方法),我们就需要将这个对象转化成葫芦四娃类型的了(因为这个是他和葫芦娃爸爸不一样的地方,四娃特有)。

3.Object类是所有类的父类,其中有方法equals等方法。

多态变量

子类和子类型

  • 类定义了类型
  • 子类定义了子类型
  • 子类的对象可以被当作父类的对象来使用
  • 赋值给父类的变量
  • 传递给需要父类对象的函数
  • 放进存放父类对象的容器里

Java的对象变量是多态的,他们能保存不止一种类型的对象

它们可以保存的是声明类型的对象,卓或声明类型的子类的对象

当把子类的对象赋给父类的变量的时候,就发生了向上造型

public interface Fu{
int num = 10; public class show(){
System.out println(num);
}
//这种情况下可通过对象直接或间接访问成员变量。 public class zi implements Fu(){
@override
int num = 20;
public class show(){
System.out println(num);
}
//如果子类或实现类有覆盖重写父类的方法,优先用子类。
}

Java 进阶P-4.4+P-4.5的更多相关文章

  1. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  2. Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...

  3. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

  4. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  5. 当我们说线程安全时,到底在说什么——Java进阶系列(二)

    原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...

  6. Java进阶03 IO基础

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/11/3000905.html 作者:Vamei 出处:http://www.cnblogs.com ...

  7. Java进阶01 String类

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...

  8. 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)

    本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...

  9. Java进阶(七)正确理解Thread Local的原理与适用场景

    原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...

  10. Java进阶(四十七)Socket通信

    Java进阶(四十七)Socket通信   今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...

随机推荐

  1. ML-梯度下降法的详细推导与代码实现

    计算 对于线性回归,梯度下降法的目标就是找到一个足够好的向量\(\theta\),使代价函数\(J(\theta) = \sum_{i=1}^{m}(\hat{y}-y_{i})^{2}\)取得最小值 ...

  2. Java注解和反射笔记

    Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些 ...

  3. DevOps 必备的 Kubernetes 安全清单

    Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群.然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏 ...

  4. SQL-GROUP BY语句在MySQL中的一个错误使用被兼容的情况

    首先创建数据库hncu,建立stud表格. 添加数据: create table stud(sno varchar(30) not null primary key,sname varchar(30) ...

  5. 已经有 MESI 协议,为什么还需要 volatile 关键字?

    本文已收录到  GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...

  6. 【Java 并发003】原理层面:Java并发三特性全解析

    一.前言 不管什么语言,并发的编程都是在高级的部分,因为并发的涉及的知识太广,不单单是操作系统的知识,还有计算机的组成的知识等等.说到底,这些年硬件的不断的发展,但是一直有一个核心的矛盾在:CPU.内 ...

  7. SSH(一)架包的引入

    一年多未使用了,有些东西真的会忘. 一.ssh的图形化记忆运作流程 二.Struts2.hibernate.spring需要引用的jar包 Struts2: 基本开发:struts-2.3.32\ap ...

  8. 在 win11 下搭建并使用 ubuntu 子系统(同时测试 win10)——(附带深度学习环境搭建)

    对于一个深度学习从事者来说,Windows训练模型有着诸多不便,还好现在Windows的Ubuntu子系统逐渐完善,近期由于工作需求,配置了Windows的工作站,为了方便起见,搭建了Ubuntu子系 ...

  9. Java框架--SSM&Oracle&Maven高级

    〇.内容介绍 一.MyBatis01:框架概述.环境搭建及入门案例.自定义框架 1.介绍 框架:封装细节,是开发中的解决方案 三层架构与SSM的关系 表示层web:SpringMVC框架 业务层ser ...

  10. 【每日一题】【回溯】【StringBuilder】2021年12月7日-17. 电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 来源:力扣(LeetCode)链 ...