2018.7.16 Java 基础 类与接口 代码块 全局数据区 关键字

1  关键字 复习 this super static

序号

区别

this

super

1

定义

本类对象

父类对象

2

使用

本类属性 方法 对象

父类属性 方法

3

查找范围

先从本类查找,找不到去父类中

直接去父类中查找

4

特殊点

This 代表当前对象

 

static 关键字 属于类空间中的保存信息 

特点 :static保存的位置是全局数据区 也可以叫做类空间中  所以不适用new关键字去开辟堆空间爱你 可以直接使用类名称的方式直接调用类中的static属性  

static定义方法 : 在定义普通方法的时候使用static关键字定义,方法就为静态方法  注意静态方法不能包含非静态方法

在一个普通方法中可以调用静态方法 在实例化之后才可以使用

public class TestDemo02
{

	public static void main(String[]args){
	
		Person per=new Person("张三",20,"北京");

		Person per2=new Person("李四",30,"上海");
		

		Person.city="南京";


		System.out.println(per);
		System.out.println(per2);
		
	}
}




class Person
{

	private String name;


	private int age;

	public static String city;



	public Person(String name,int age,String city){
	
		this.name=name;

		this.age=age;

		this.city=city;
	}

	//静态上下文 就是如下方法
	public static void fun(){
		
		tall();

	
	}

	// 以下为非静态方法
	public void tall(){
	
		System.out.println("name"+name);
	}





	public String toString(){
	
		return "姓名"+name+"年龄"+age+"城市"+city;
	
	}



}

代码块分为三部分   

普通代码块 

构造快:优先于构造方法执行 有几个对象就执行几次 

静态块 :静态块优先执行,且只执行一次  

public class Daimakuai {
	// 普通块 方法体内部由大括号{}括起,
	// 执行顺序为按照正常的执行顺序(先出现,先执行)执行。
	{
		System.out.println("我是构造块");
	}

	// 构造块 类的内部由{}括起 每次构造对象时都会被调用 优先于构造函数
	public Daimakuai() {
		System.out.println("我是构造方法");
	}

	// 静态块 类的内部 形式 static{} 用于初始化类 初始化类的属性
	// 每个静态代码块执行一次 先定义先执行的原则
	static {
		System.out.println("我是静态块");
	}
	static public int h1 = 12;
	public int h2 = 13;
	static {
		System.out.println(h1);
		Daimakuai m3 = new Daimakuai();
		System.out.println(h1);
		System.out.println(m3.h2);
		System.out.println(m3.h1);
		print();
	}

	public static void print() {
		System.out.println("已调用静态方法");
	}

	public static void main(String args[]) {
		Daimakuai d1 = new Daimakuai();
		Daimakuai d2 = new Daimakuai();
		{
			String str = "hello";
			System.out.println(str);
		}
		String str = "world";
		System.out.println(str);
	}
}

final 关键字  在Java中表示终结器的概念 可以定义类 方法  属性  被定义的类不能继承 方法不能覆写 属性不能修改(常量)

多态:  方法的多态: 方法的重载 给定不同参数 完成不同的功能

对象的多态 : 向上转型 向下转型  

向上转型 使用率80%

不转型的情况  10%

向下转型的情况 10%

向下转型必须先向上转型  在转型过程中必须发生关系 向上转型止呕才可以向下转型否则

Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B

        at TestDemo.main(TestDemo.java:8)

instanceOf关键字 : 

在发生对象转型的时候,会出现错误 可以使用instanceOf关键字对象的判断 判断某个对象是否是某个类的实例

语法格式如下;

对象  instacneof  类名称   返回值 Boolean

public static void main(String[]args){
	
		//A a =new A();

		B b=new B();

		A a=new B();
		System.out.println(a instanceof A);
		System.out.println(a instanceof B);
		
	}

抽象类  

就是一个普通的类 里面增加了抽象的方法, 使用abstract关键字进行声明

public abstract class Person{}

在继承关系中 也会继承一个抽象类  而不是一个实现好的类

抽象类可以存在子类会被被继承   继承关系中子类实例化首先调用父类的构造方法

抽象类不能使用final关键字修饰  因为抽象要被继承才可以使用 

抽象类中不能存在static方法  因为被static定义的属性保存在类空间中

如何使用抽象类  一个类继承一个抽象类 这个类本身不是抽象类则要实现抽象类所有的抽象方法

抽象类缺点 受Java中单继承的局限  可以应用于  模版设计模式

接口:   在Java中属于特殊的类 只要一个类全部有抽象方法 全局变量组成这个类就是接口

作用: 定义标准 代表能力 对外暴露的方法

interface

一个类实现一个接口 接口可以存在多实现接口的过程

接口不能实例化 因为接口中的方法全是抽象方法


interface USB  
{

	//1 USB接口定义标准

	// 初始化工作

	public void install();


	// 工作开始

	public void work();
	
}



public class IntDemo
{

	public static void main(String[]args){
	
		Computer p=new Computer();

		p.plugin(new Print());


	}
}

class Phone implements USB
{
		// 初始化工作

	public void install(){
	
		System.out.println("手机开始初始化");
	}


	// 工作开始

	public void work(){
	
		System.out.println("手机开始传输数据");
	}
}


class Print implements USB
{
		// 初始化工作

	public void install(){
	
		System.out.println("打印机开始初始化");
	}


	// 工作开始

	public void work(){
		System.out.println("打印机开始打印");
	}
}


class Computer
{
	
	public void plugin(USB u){  //向上转型 接收实现类
	
		u.install();

		u.work();
	}
}

一个类只能单继承 但是接口可以多继承

接口与类的区别

No

区别

抽象类

接口

1

定义

Abstract

interface

2

组成

普通方法 抽象方法 构造方法 普通属性

抽象方法 全局常量 默认方法

3

访问权限

Public private

public

4

关系

一个类抽能继承一个抽象类

一个类可以实现多个接口

5

使用

extends关键字

Implements关键字

6

特殊点

 

一个接口可以继承多个接口

工厂设计模式: 类与类之间是存在依赖关系的 依赖关系会造成耦合程度高 如果想要实现降低耦合的方式可以使用工厂设计模式

猜你喜欢

转载自blog.csdn.net/qq_38202756/article/details/81068695