Java语法基础学习DaySix
一、JavaBean——可重用组件
1.JavaBean是指符合以下标准的Java类:
(1)类是公共的
(2)有一个无参的公共的构造器
(3)有属性,且有对应的get、set方法
2.好处
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一个随时随地的复制和黏贴的功能,而不能关心任何改变。
二、包——package
1.作用:对类文件进行分类管理;给类文件提供多层名称空间;一般包的出现是为了区分重名的类,所以包名要尽量唯一
2.注意事项
包名的所有字母都要用小写。
三、访问权限修饰符public 、 private 、 protected 、 default(默认,即没有修饰符)
1.访问权限大小
public:任何地方
protected:类内部、同一个包内、子类
default:类内部、同一个包内
private:类内部
2.注意事项
对于class的权限修饰只能是public或者default,public类可以在任何地方被访问,default类只可以被同一个包内的类访问。
四、多态
1.体现
(1)方法的重载和重写 (2)子类对象的多态性(父类的引用或者接口的引用指向了自己的子类的对象)//Person p = new Man();
2.好处
提高了程序的拓展性。比如在方法中形参的类型用父类类型,通过多态可以直接传进子类的对象。
3.弊端
当父类引用指向子类对象时,虽然提高了扩展性,但只能访问父类具有的方法,不可以访问子类特有的方法。
4.特点
(1)子类对象的多态性使用的前提:要有类的继承;要有子类对父类方法的重写
(2)程序运行时分为编译状态和运行状态。(编译时不创建对象,只检查语法错误)
对于多态性来说,编译时,看“左边”,将此引用变量理解为父类的类型,因此无法访问子类特有的方法;
执行时,看“右边”,关注真正对象的实体,即子类的对象,那么执行的方法是子类重写的。
(3)子类对象的多态性,并不适用于属性,即调用的都是引用变量所属的类中的属性。
5.强制类型转换
(1)想要访问子类特有的方法,可以通过强转符:() 将父类对象强制向下转换成子类引用。//Man m = (Man)p;
(2)判断对象是哪个具体的子类类型,可以使用instanceof关键字,格式:对象 instanceof 类型,返回一个boolean值。// if ( p instanceof Man)
instanceof可以判断对象是否实现了指定的接口或继承了指定的类。 // Man m = (Man)p;
6.代码案例
class Test{
public static void main(String[] args){
Test t = new Test();
t.method(new Animal());
System.out.println("========");
t.method(new Dog());
System.out.println("========");
t.method(new Cat());
}
public void method(Animal a){//通过多态性,使父类引用可以指向子类对象
System.out.println(a.number);//输出1,说明调用的是Animal类中的number
a.eat();
a.run();
if(a instanceof Dog){
Dog d = (Dog)a;//强制向下转换,才能调用子类特有的bake方法
d.bake();
}
if(a instanceof Cat){
Cat c = (Cat)a;
c.bake();
}
}
}
class Animal{
int number = 1;
public void eat(){
System.out.println("吃东西");
}
public void run(){
System.out.println("走路");
}
}
class Dog extends Animal{
//创建父类同名变量number
int number = 2;
//重写父类eat和run方法
public void eat(){
System.out.println("吃狗粮");
}
public void run(){
System.out.println("狗爬中");
}
public void bake(){
System.out.println("汪汪叫");
}
}
class Cat extends Animal{
int number = 3;
public void eat(){
System.out.println("吃猫粮");
}
public void run(){
System.out.println("走猫步");
}
public void bake(){
System.out.println("喵喵叫");
}
}
五、object——所有Java类的根父类
1.equals方法
(1)格式:boolean equals(Object obj)
(2)特点
A:只能处理引用类型变量,不能处理基本数据类型变量
B:在Object类中,equals()方法比较的是两个引用变量的地址值是否相等
C:像String类、包装类、FIle类、Date类等这些类重写了Object类的equals()方法,比较的是两个对象的“实体内容”是否完全相同。
2.toString方法
(1)格式:public String toString();返回值:getClass().getName() + "@" + Integer.toHexString(hashCode())
(2)注意事项
A:当我们直接打印一个对象的引用时,实际默认调用的就是这个对象的toString()方法
B:当我们打印的对象所在的类没有重写Object中的toString方法时,调用的是Object类中定义的toString方法,返回此对象所在的类的类名及对应的堆空间中对象实体的首地址值。
C:可以通过对Object的toString方法的重写,使对象对应的字符串内容有意义。
Java语法基础学习DaySix的更多相关文章
- Java语法基础学习DayEighteen(常用类)
一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...
- Java语法基础学习DaySeven
---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean byte——Byte ...
- Java语法基础学习DayThree
一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...
- Java语法基础学习DayTwentyOne(网络编程)
一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...
- Java语法基础学习DayTwenty(反射机制续)
一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...
- Java语法基础学习DayNineteen(反射机制)
一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...
- Java语法基础学习DaySeventeen(多线程续)
一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...
- Java语法基础学习DaySixteen(多线程)
一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
- Java语法基础学习DayFifteen(IO续)
一.缓冲流(处理流的一种) 1.作用:可以提高文件操作的效率 2.使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制 特点:flush()方法 代 ...
随机推荐
- LeetCode--437--路径总和3
问题描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...
- python3-知识扩展扫盲易忘-zip的用法
>>>a = [1,2,3] >>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zi ...
- 20170907wdVBA_ImportPicturesBaseOnExcel
Public Sub ImportPicturesBaseOnExcel() Dim shp As Object Dim xlApp As Object Dim Wb As Object Dim Rn ...
- (转)python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
- 关于Androidstudio无法获取到所有的SDk版本,需要挂国内镜像的问题
由于墙的原因 我们在使用AndroidStudio的时候SDK Manager无法获取到所有的版本 需要我们设置下使用国内的镜像 ****首先打开Android SDK Manager 然后按照如图 ...
- 微信小程序select不能使用,如何实现同样的效果
如果想实现同样的效果,只能使用小程序组件picker,其中,可以有一列,或者多列 点击链接查看详情: https://mp.weixin.qq.com/debug/wxadoc/dev/compone ...
- jquery父、子、兄弟节点查找
js var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var ch ...
- dsu on tree练习
dsu on tree主要是处理一些有根树子树询问的操作, 作用与点分治和线段树合并类似. 一般无根树询问所有树链信息的直接就点分了, 有根树的话一般用线段树合并或dsu on tree, 线段树合并 ...
- leetcode_输入一个数组,目标树,检查目标是数组下标的哪两个之和,不准重复
今天是leetcode第一天,但是不太顺利.做这些,想不到 原题目: 我给的答案: class Solution { public: vector<int> twoSum(vector&l ...
- python-day76--django-中间件
什么是中间件?中间件应用场景?和装饰器区别? 中间件 对于所有批量的请求用中间件合适,而对于某些请求个数少用装饰器合适 - 中间件是什么? - 是一个类 - 方法名必须是process_request ...