super调用父类属性和方法:
super调用构造器:
=========================================================================
父类的引用指向了子类的对象!!
**虚拟方法调用:
当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法。**
package com.itholmes.p2;
public class PersonTest {
public static void main(String[] args) {
//定义了Person类调用
Person p1 = new Person();
p1.eat();
//定义了Man类调用
Man man = new Man();
man.eat();
man.age = 25;
//定义了Woman类调用
Woman woman = new Woman();
woman.eat();
System.out.println(“******************”);
//对象多态形式:父类的引用指向子类的对象
Person p2 = new Man();
//当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法。–虚拟方法调用
p2.eat();
p2.walk();
//earnMoney()没有在父类Person中定义,在子类Man中定义了。
//p2中的earnMoney()方法就不能被调用了,因为Person中没有!!!
//p2.earnMoney();
}
}
多态性常用的情形:
package com.itholmes.p2;
public class Test {
public static void main(String[] args) {
Test t = new Test();
//多态性操作
t.func(new Dog());
}
//设置类对象为接受
public void func(Animal animal) {
animal.eat();
animal.shout();
}
}
class Animal{
public void eat() {
System.out.println(“动物吃饭”);
}
public void shout() {
System.out.println(“动物手套”);
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println(“小狗吃饭”);
}
@Override
public void shout() {
System.out.println(“小狗手套”);
}
}
对象的多态性,只适用于方法,不适用于属性! 我们如果定义了在子类和父类中定义了相同属性,调取时也仅仅调用了父类,也就是对于属性(编译和运行都看左边)。
package com.itholmes.p2;
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
//运行也仅仅显示的是父类
System.out.println(animal.age);
}
}
class Animal{
int age = 10;
}
class Dog extends Animal{
int age = 20;
}
**多态仅仅能够调用父类的方法和属性和子类重写的方法,
那么,如何调用子类特有的属性和方法?**
向下转型:使用强制类型转换符号!!
package com.itholmes.p2;
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
//对于属性运行也仅仅显示的是父类属性
System.out.println(animal.age);
//向下转型,强制转换
Dog d = (Dog)animal;
System.out.println(d.age);
}
}
class Animal{
int age = 10;
}
class Dog extends Animal{
int age = 20;
}
================================================================================
instanceof操作符:
package com.itholmes.p2;
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
//对于属性运行也仅仅显示的是父类属性
System.out.println(animal.age);
//向下转型,强制转换
Dog d = (Dog)animal;
System.out.println(d.age);
//这个时候的animal已经转为了Dog类型!!!
System.out.println(animal instanceof Dog);
//10
//20
//true
}
}
class Animal{
int age = 10;
}
class Dog extends Animal{
int age = 20;
}
class monkey extends Animal{
int age = 30;
}
alt + shift + s 快捷键,弹出源代码的相关选项,通常用来获取变量的get和set,构造器的方法。
============================================================================
Object类是所有Java类的根父类。
如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。
getClass() :获取当前类名
getSuperclass() :获取当前父类名
package com.itholmes.p2;
public class Test {
public static void main(String[] args) {
Order order = new Order();
//getClass()获取当前类名
System.out.println(order.getClass());
//getSuperclass()获取当前父类名
System.out.println(order.getClass().getSuperclass());
//class com.itholmes.p2.Order
//class java.lang.Object
}
}
class Order{
}
Object类中的clone()方法:复制类。
==================================================================================
== 作用:
比较基本数据变量数据是否相同。
比较引用数据类型变量,对象地址值是否相同。
equals()方法使用:
只能适用于引用数据类型。
========================================================================================
注意和之前的Arrays.toString()方法不同!
一般我们定义的类:返回类的路径和类名 + @ + JVM虚拟地址。
像Integer这种包装类,使用toString()后,得到的是对应的基本数据类型(例如Integer对应int)。
package com.itholmes.p2;
public class test {
public static void main(String[] args) {
Tom t = new Tom();
//当我们输出一个对象的引用时,实际上就是调用当前对象的toString()方法。
System.out.println(t.toString());//com.itholmes.p2.Tom@5aaa6d82
System.out.println(t);//com.itholmes.p2.Tom@5aaa6d82
}
}
class Tom{
}
像toString这种方法完全可以ctrl + 左键 ,查看他的源码!
==============================================================================
注意权限public,没有返回值,没有形参。
package com.itholmes.p2;
import java.util.Date;
import org.junit.Test;
public class test {
@Test
public void testEquals() {
String s1 = “MM”;
String s2 = “MM”;
System.out.println(s1.equals(s2));
Object obj = new String(“GG”);
Date date = (Date)obj;
}
}
手动导入方法如下:
==============================================================================
三者转换:基本数据类型,包装类,String。
20.1 类的基本数据类型 ⇒ 转换为包装类(通过,调用包装类的构造器)
integer类型转换注意事项:
package com.itholmes.p2;
import org.junit.Test;
public class test {
//类的基本数据类型 ==》 转换为包装类(通过,调用包装类的构造器)
@Test
public void testEquals() {
int num1 = 0;
//基本数据类型变量无法直接使用toString类的方法
//System.out.println(num1.toString());
//但是如果是类对象转换就可以使用类方法。
Integer in1 = new Integer(num1);
System.out.println(in1.toString());
//符合integer型的字符串形式可以
Integer in2 = new Integer(“123”);
System.out.println(in2.toString());
//但是,不符合就会报错!!!
// Integer in3 = new Integer(“123abc”);
// System.out.println(in3.toString());
}
}
boolean类型转换注意事项:
package com.itholmes.p2;
import org.junit.Test;
public class test {
//类的基本数据类型 ==》 转换为包装类(通过,调用包装类的构造器)
@Test
public void testEquals() {
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean(“true”);
Boolean b3 = new Boolean(“true123”);
System.out.println(b3);
//注意boolean比较特殊输入别的字符串,默认为false
//具体可以再查看已下boolean判断的源码
}
}
20.2 包装类 ⇒ 转换为基本数据类型(调用包装类的xxxValue(),xxx看数据类型)
package com.itholmes.p2;
import org.junit.Test;
public class test {
//包装类 ⇒ 转换为基本数据类型(调用包装类的xxxValue(),xxx看数据类型)
@Test
public void test2() {
//int类型
Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1);
//float类型
Float fl1 = new Float(1.1);
float f1 = fl1.floatValue();
System.out.println(f1);
}
}
自动装箱实际就是基本数据类型 转为 包装类.
自动拆箱实际上是包装类 转为 基本数据类型
package com.itholmes.p2;
import org.junit.Test;
public class test {
//自动装箱实际就是基本数据类型 转为 包装类
//自动装箱,像下面基本数据类型直接赋值给了对象,就是自动装箱。
//int num2 = 10;
//Integer In2 = num2;
//自动拆箱实际上是包装类 转为 基本数据类型
//Integer i = new Integer(123);
//System.out.println(i.toString());
@Test
public void test2() {
int num1 = 10;
//这里num1是基本数据类型,然而这里参数要传递一个对象!显然不可以!!
//但是再java 5.0 新特性后,就补充了自动装箱,从而满足了Object obj = num1;这样的例子。
method(num1);
}
public void method(Object obj) {
System.out.println(obj);
}
}
20.4 基本数据类型,包装类 ⇒ String类型(调用String 重载的valueOf(xxx))
方式1:连接运算
方式2:String.valueOf(xxx),调用String中的valueOf转换为字符串
package com.itholmes.p2;
import org.junit.Test;
public class test {
@Test
public void test2() {
int num1 = 10;
//方式1:连接运算
String str = num1 + “”;
//方式2:String.valueOf(xxx),调用String中的valueOf转换为字符串
float f1 = 12.3f;
String str2 = String.valueOf(f1);
System.out.println(str2);
}
}
20.5 String类型 ⇒ 基本数据类型,包装类(调用包装类的parseXxx())
注意:首先,强转是不可以的!!! 原因:强转没有子父类关系的,是不能被强转。
String类型 ⇒ 基本数据类型,包装类(调用包装类的parseXxx())
package com.itholmes.p2;
import org.junit.Test;
public class test {
@Test
public void test2() {
String str1 = “123”;
//首先,强转是不可以的!!! 原因:强转没有子父类关系的,是不能被强转。
//int num1 = (int)str1;
//Integer in1 = (Integer)str1;
//String类型 ⇒ 基本数据类型,包装类(调用包装类的parseXxx())
int num2 = Integer.parseInt(str1);
System.out.println(num2);
String str2 = “true”;
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);
//需要注意的hi是NumberFormatException错误,例如把一个abc转为Integer类型,那肯定格式错误!
}
}
package com.itholmes.p2;
import org.junit.Test;
public class test {
@Test
public void test2() {
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);
//结果为:1.0。
//为什么不是1呢?因为三元运算符的两个结果必须统一为一个类型.
//当然Integer和Double比起来,自然是将Integer提升为了Double类型了。
System.out.println(o1 instanceof Double);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
面试准备+复习分享:
为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦
package com.itholmes.p2;
import org.junit.Test;
public class test {
@Test
public void test2() {
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);
//结果为:1.0。
//为什么不是1呢?因为三元运算符的两个结果必须统一为一个类型.
//当然Integer和Double比起来,自然是将Integer提升为了Double类型了。
System.out.println(o1 instanceof Double);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-TBOFufgL-1711552094607)]
[外链图片转存中…(img-U1fMh1Ze-1711552094608)]
[外链图片转存中…(img-7ENbPRL8-1711552094608)]
[外链图片转存中…(img-gdl2oMhS-1711552094609)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
[外链图片转存中…(img-vi26SSgG-1711552094609)]
[外链图片转存中…(img-xNEg8Led-1711552094609)]
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
[外链图片转存中…(img-HddYF60P-1711552094610)]
面试准备+复习分享:
为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦
[外链图片转存中…(img-hf50xC8c-1711552094610)]