热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA初窥DAY14

JAVA初窥-DAY14顺序表和链表包访问限定修饰符面向对象与面向过程继承superfinal组合向上转型向下转型顺序表和链表顺序表和链表的区别、数组和链表的区别、ArrayLi

JAVA初窥-DAY14

    • 顺序表和链表
    • 访问限定修饰符
    • 面向对象与面向过程
    • 继承
    • super
    • final
    • 组合
    • 向上转型
    • 向下转型


顺序表和链表

顺序表和链表的区别、数组和链表的区别、ArrayList和LinkedList的区别:
在增删改查四个方面去表述:
增:顺序表在增加元素的时候需要移动元素,链表只需要新建一个节点并改变上一个节点和此节点的next地址
删:顺序表在删除时也需要移动元素,而链表则只需要改变上一个节点的next地址
改:顺序表改变元素只需要通过下标或遍历找到需要修改的元素直接进行修改、链表改变节点需要遍历来找到节点再进行修改其val值
查:顺序表可以通过遍历来查找或者元素的下标直接进行查找,而链表则需要遍历来查询。

导所有代码中用到的包import java.util.*;
导入某个 如Scanner: import java.util.Scanner;
也可在代码中直接导入: java.util.Scanner scanner = new java.util.Scanner(System.in);
静态导入:import static java.lang.System.*;则代码中的打印为out.println();
在src下新建包的时候一般命名为域名如:com.baidu.src / www 此处只是新建包(可以理解为在你的代码目录下新建文件夹)以此来区分一些相同名称的类,但不可用中文来命名,新建包后需要在代码文件的第一行加上类的地址如: packa com;(此类在com地址下)

包是组织类的一种方式,包可以保证类的唯一性。

访问限定修饰符

public:在所有类里都可以访问这个类里的普通成员变量。
protected:不同包中的子类可以访问。
private:只有在同一个包中同一个类才可以访问。
默认包访问权限:只有类在同一个包内,才能访问这个类里的普通成员变量。

范围privatedefaultprotectedpublic备注
同一包中的同一类1111在一个包里,且在一个类里
同一包中的不同类111在一个包里,同类不同类都可以访问
不同包中的子类11在不同的包里,但是是这个修饰符所修饰的类的子类也可以访问
不同包中的非子类1在不同包里,无任何关系也可以访问

面向对象与面向过程

什么是对象:由类实例化得到的就叫作对象->new
OOP:封装,使用private关键字,对普通成员变量或方法进行封装,在对外提供get与set方法
意义:数据的安全性提高,类的调用者对类使用的成本降低,只需要关注公开方法即可。
面向过程:就是注重过程,如:你想吃苹果,你需要先去买苹果,再洗苹果,再吃苹果。这一系列的操作就是过程。
面向对象:注重对象:如:你想吃苹果,交给保姆去做,直接等着吃苹果就好。这个保姆就是对象,只需要对对象下达指令即可。

继承

所有类的父类:Object,任何一个类都默认继承该类
有时创建的类之间有一定的联系,如:创建一个图片类,再创建一个人物图片类,再创建一个风景图片类。图类里有普通成员变量:颜色,名字,普通成员方法有,复制,删除。而这些方法和变量 在其他两个类里也有,但是其他两个类也有各自其他的变量和方法,则:

class Picture{public String name;public String color;public void copy(){System.out.println("此文件已复制!!")}public void delete(){System.out.println("此文件已删除!!")}
}class PersonPicture extends Picture{public String person;
}
class SceneryPicture extends Picture{public String scenery;
}

则, picture就为父类,此时下面两个类继承了picture这个类的属性和方法。
A extends B的意思是 A是子类继承了B父类的方法和属性。
而A继承了B除了构造方法外的所有。
JAVA中只有单继承,就是某个子类只能继承于一个父类。
对于父类中private字段,子类中无法访问
Picture :父类,基类,超类
PersonPicture/SceneryPicture:子类,派生类
继承的作用:代码的复用

super

this是当前对象的引用
this(DAY-08目录下封装及构造方法里)
super表示对父类对象的引用
super.data 显示或调用父类成员变量
super.func() 显示或调用父类的方法
在子类的构造方法中,super()表示对父类构造方法的调用
当父类构造方法没被调用时,子类的属性和方法均不能被调用,同样的super()在构造方法内只能放在第一行

class Picture{public String name;public String color;public Picture(String name){this.name = name;}public void copy(){System.out.println(name +"此文件已复制!!");}public void delete(){System.out.println(name +"此文件已删除!!");}
}
class PersonPicture extends Picture{public String person;public PersonPicture(String name,String person){super(name);this.person = person;}
}
class SceneryPicture extends Picture{public String scenery;public SceneryPicture(String name,String scenery) {super(name);this.scenery = scenery;}
}
public class Demo01 {public static void main(String[] args) {PersonPicture person = new PersonPicture("p2","lit");person.copy();SceneryPicture scenery = new SceneryPicture("p3","wind");scenery.delete();}
}

此时的执行顺序为:

父类Picture的静态代码块,
子类PersonPicture的静态代码块,
父类Picture的实例代码块,
父类Picture的构造函数,
子类PersonPicture的实例代码块,
子类PersonPicture的构造函数,子类SceneryPicture的静态代码块,
父类Picture的实例代码块,
父类Picture的构造函数,
子类SceneryPicture的实例代码块,
子类SceneryPicture的构造函数。

final

在之前,我们就已经接触过final,但在当时final只是用来修饰常量,常量不可被修改,而final关键字也能修饰类,final修饰的类就不能被继承。不能被继承的类就叫密封类。而final还能修饰方法,这种方法被称为密封方法
一般情况下,继承不过三层。
当final修饰方法时,这个方法就叫密封方法,这个方法不能被重写
当final修饰变量,这个变量就是常量,常量不能被修改

组合

组合的关系:has a 或a part of

class Person{
public Man[] man;
public Woman[] woman;
}
class Man{
}
class Woman{
}

向上转型

把子类的对象给父类,父类的引用,指向了子类的实例
一般发生向上转型的情况有:赋值,方法传参,方法返回

class A{public int a = 1;
}
class B extends A{public int a = 2;public int b = 3;
}
public class Test{public static void main(String[] args){A a = new B();//向上转型 B是子类,A是父类。System.out.println(a.a);//此时值为1,//System.out.println(a.b);此时报错,因为定义的是A父类的类型,而b是B类型特有的。 }
}

向下转型

不安全,容易出错,如果要进行向下转型,先要进行向上转型。

class A{public int a = 1;
}
class B extends A{public int a = 2;public int b = 3;
}
public class Test{public static void main(String[] args){A a = new B();//向上转型 B是子类,A是父类。System.out.println(a.b);//编译出错,A类里没有bB b = (B)a;//向下转型System.out.println(b.a);//2System.out.println(b.b);//3}
}


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
author-avatar
淅沥的雨的海角_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有