我是靠谱客的博主 合适白云,最近开发中收集的这篇文章主要介绍Java4 2021.6.26,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

多态性:编译时类型与运行时类型不一致导致,相同类型变量调用同一个方法时出现多种行为特征
多态情况下,能调用的方法仅看声明类所定义的方法
编译时类型=声明类型

package practice;
import java.util.*;
class BaseClass{
	public int book=6;
	public void base() {
		System.out.println("父类的普通方法");
	}
	public void test() {
		System.out.println("父类被覆盖的方法");
	}
}
public class Main extends BaseClass{
	public String book="轻量级";
	public void test() {
		System.out.println("子类覆盖父类的方法");
		}
	public void sub() {
		System.out.println("子类的普通方法");
	}
	public static void main(String[] args) {
		BaseClass sc=new BaseClass();
		System.out.println(sc.book);//6
		sc.test();//父类被覆盖的方法
		sc.base();//父类的普通方法
	    Main bc=new Main();
	    System.out.println(bc.book);//轻量级
	    bc.test();//子类覆盖父类的方法
	    bc.base();//父类的普通方法
	    bc.sub();//子类的普通方法
	    BaseClass p=new Main();//子类对象直接赋给父类引用变量
	    //运行该类对象时其**方法行为**总是表现出子类方法的行为特征
	    System.out.println(p.book);//6,这个是变量不属于方法行为
	    p.test();//子类覆盖父类的方法
	    p.base();//父类的普通方法
	    //如何在这里用p调用sub???
	}
}

对于上面这个程序:
base()方法只有父类有,且没有发生过任何改动,所以输出时均是父类的普通方法
test()如果创建实例时的运行时类型为父类则输出父类test,如果运行时类型是子类则输出子类test【多态现象】
book不属于方法行为,实例变量不具有多态性
子类是一种特殊的父类,允许子类对象直接赋给父类引用变量,无需转换(即向上转型,由系统自动完成)

引用变量的强制类型转换
1、基本类型之间的转换只能在数值类之间转换,数值类型与布尔值不能转换
2、引用类型的转换只能在具有继承关系的两个关系之间进行
(若想把父类实例转换成子类实例,则该实例事实上是子类才行:编译时是父类,运行时是子类)

package practice;
import java.util.*;
public class Main{
	public static void main(String[] args) {
		double d=13.4;
		long l=(long) d;
		System.out.println(l);
		int in=5;
		//boolean b=(boolean) in;会显示错误
		Object obj="Hello";
		String objstr=(String) obj;
		System.out.println(objstr);
		Object obj2=new Integer(5);//该变量实际类型是Integer
		String str=(String) obj2;//会报错,因为obj2现在是Integer类型不与String有继承关系
	}
}

instanceof运算符判断是否能进行强制转换
对比的是编译类型和要转换的类

if(obj2 instanceof String)//引用类型变量 instanceof 类
{
	String str=(String) obj2;
}
package practice;
import java.util.*;
public class Main{
	public static void main(String[] args){
		Object hello="Hello";
		System.out.println(hello instanceof Object);//T
		System.out.println(hello instanceof String);//T
		System.out.println(hello instanceof Math);//F
		System.out.println(hello instanceof Comparable);//T
		String a="Hello";
		System.out.println(hello instanceof Math);//F
	}
}

初始化块
1、初始化块修饰符只能是static,被称为静态初始化块
2、系统先执行类里定义的初始化块
3、在构造器之前隐形执行
普通初始化块按顺序执行语句

package practice;
import java.util.*;
public class Main{
	{
		a=6;
	}
	int a=9;
	public static void main(String[] args) {
		System.out.println(new Main().a);//输出9	}
}

初始化块与构造器
初始化块是固定的不能引入其他数

静态初始化块
普通初始化块对类对象进行初始化,静态初始化块对类进行初始化,所以优先于普通初始化块执行
对类变量进行初始化,不能对实例变量进行初始化

package practice;
import java.util.*;
class Root{
	static {
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		System.out.println("Root的构造器");
	}
}
class Mid extends Root{
	static {
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		System.out.println("Mid无参数的构造器");
	}
	public Mid(String mg) {
		this();
		System.out.println("Mid有参数构造器"+mg);
	}
}
class Leaf extends Mid{
	static {
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}
	public Leaf() {
		super("fengkuang");
		System.out.println("Leaf的构造器");
	}
}
public class Main{
	public static void main(String[] args) {
		new Leaf();
		new Leaf();
	}
}
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的构造器
Mid的普通初始化块
Mid无参数的构造器
Mid有参数构造器fengkuang
Leaf的普通初始化块
Leaf的构造器
Root的普通初始化块
Root的构造器
Mid的普通初始化块
Mid无参数的构造器
Mid有参数构造器fengkuang
Leaf的普通初始化块
Leaf的构造器

最后

以上就是合适白云为你收集整理的Java4 2021.6.26的全部内容,希望文章能够帮你解决Java4 2021.6.26所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部