Java学习笔记(2)

设计模式
前人所总结的代码设计思想

单例(singleton)模式
一个类只能创建一个实例对象

单例模式懒汉
单例模式中既然只能创建一个实例对象供后面使用,所以必须将构造器私有化,然后在单例类中创建自己本身的对象(创建时要调用static方法,保证这个对象制备创建一次),然后在该类中留一个供外部获取该单例的公用方法,外部想要获该单例只能通过使用类名来访问该方法(一定是静态方法),访问后,该方法返回这个单例对象供外使用。

class singletonex {
	//创建自己本身的对象
	//必须加静态方法,将single至于静态方法区,保证该语句只被执行一次
	private static singletonex single = new singletonex();
	private singletonex() {
		
		System.out.println("单例模式");
	}
	
	//外部只能通过类名+方法名 进行访问,获得单例的对象
	//返回值为static singleton 类型
	public static singletonex getsingleton() {
		
		return single ;
	}

}
public class singleton{
	
	public static void main(String[] args) {
		 //获取单例对象
		singletonex s= singletonex.getsingleton();
		}
}

单例模式饿汉
该开始不给单例赋值,使用时创建单例对象

class singletonex {
	//创建自己本身的对象
	//先不赋初值
	private static singletonex single ;
	private singletonex() {
		
		System.out.println("单例模式");
	}
	
	//外部只能通过类名+方法名 进行访问,获得单例的对象
	public static singletonex getsingleton() {
		
		if(single == null) {
				
				single = new singletonex();
				return single;
		}
		else {
			
			return single ;
		}
	}

}
public class singleton{
	
	public static void main(String[] args) {
		 
		singletonex s= singletonex.getsingleton();
		}
}

抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

//抽象类,无法被实例化
abstract class person{
	int age ;
	String name ;
	//模拟只知道又抽烟功能,不知道抽什么烟
	//被继承后,该方法必须被子类实现
	//public不能被final,private等修饰
	public abstract void smoking();	
}
class student extends person{	
	public void smoking(){
		System.out.println("学生在抽烟");
	}
}
class worker extends person{
	public void smoking() {
		System.out.println("工人在抽烟");
	}	
}

继承了抽象类的普通类必须实现抽象类中的所有抽象方法。抽象类之间的继承不需要实现父抽象类的方法。
调用类的抽象方法不能和private,final(不能重写),static 共存。

  • 如果一个类包含抽象方法,那么该类必须是抽象类。
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
  • 继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
    接口

interface test{
	public void smoking();
	public void getName();
	public void getAge();
}
interface test1{
	public void smoking();
	public void isHaveBoyFriend();
	public void isGay();
}
//类可以继承多个接口,并实现接口内的所有方法
//如果多个接口中有同名的方法被一个类所继承,
class Teacher implements test,test1{
	public void isHaveBoyFriend() {
	}
	public void isGay() {
	}
	//相同方法被重写
	public void smoking() {
	}
	public void getName() {
	}
	public void getAge() {	
	}
}

接口是对行为的抽象,类是对属性和行为的抽象。通常用interface来定义。
接口中的方法默认是抽象方法。

  • 接口特性
    1.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
    2.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
    3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 抽象类和接口的区别
  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

猜你喜欢

转载自blog.csdn.net/qq_41681241/article/details/82899515
今日推荐