类设计的注意事项:类的设计主要是父类的设计
子类最好不要继承一个已经完全实现的类,因为一旦发达向上转型,所调用的方法,一定是被子类覆盖过的方法,所以只会继承抽象类和接口。
解耦
耦合度是什么?
两个对象之间相互依赖的程度,是衡量代码独立性的一个指标。
软件开发追求高/低耦合度?
软件开发追求低耦合度
怎么才能降低代码的耦合度?
降低代码的耦合度是一个非常重要的实践,它有助于提高代码的可维护性、可读性和可扩展性。
引入工厂模式:
解决解耦
代理设计模式(静态代理):
扩展性,同时保护核心功能,提示代码安全性和健壮性
适配器设计模式:
在继承借口时,就必须全部实现接口中的方法,这样很多用不到的也要实现很麻烦,所以就有适配类的出现,即用一个抽象类并用抽象类里的空方法体来实现接口中的所有方法,然后从这个抽象类中继承,就可以有选择的实现相关方法
内部类
内部类:也会生成自己独立class文件,命名的规则是outname$innername
内部类可以直接访问外部类的私有变量
第一种:依赖外部类,定义一个创建内部类的方法
class JavaDemo
{
public static void main(String[] args)
{
Outter out = new Outter();
//第一种:依赖外部类,定义一个创建内部类的方法
Outter.Inner in = out.getInner();
System.out.println(in);
}
}
class Outter
{
private static int number = 10;
public void testOut(){
System.out.println("outter");
}
//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
static class Inner
{
public void testInner(){
System.out.println("inner"+number);
}
}
public Inner getInner(){
Inner in = new Inner();
return in;
}
}
第二种:依赖外部类的实例,然后利用out.new Inner();
class JavaDemo
{
public static void main(String[] args)
{
Outter out = new Outter();
//第二种:依赖外部类的实例,然后利用out1.new Inner();
Outter out1 = new Outter();
Outter.Inner in1 = out1.new Inner();
System.out.println(in1);
in1.testInner();
}
}
class Outter
{
private static int number = 10;
public void testOut(){
System.out.println("outter");
}
//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
static class Inner
{
public void testInner(){
System.out.println("inner"+number);
}
}
public Inner getInner(){
Inner in = new Inner();
return in;
}
}
静态内部类创建:new Outter.Inner(),静态内部只能访问静态变量
class JavaDemo
{
public static void main(String[] args)
{
Outter out = new Outter();
//静态内部类创建:new Outter.Inner(),静态内部类只能访问静态变量
Outter.Inner in2 = new Outter.Inner();
System.out.println(in2);
in2.testInner();
}
class Outter
{
private static int number = 10;
public void testOut(){
System.out.println("outter");
}
//内部类:也会生成自己独立的class文件,命名的规则是outname$innername
static class Inner
{
public void testInner(){
System.out.println("inner"+number);
}
}
public Inner getInner(){
Inner in = new Inner();
return in;
}
}
匿名内部类:没有名字,编译成class,系统会默认使用1、2、3等作为名字
类可以定义在函数类
class JavaDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
new AA(){ //1、定义类 2、实现接口 3、创建实例 new AA()
public void testAA(){
System.out.println("testAA");
}
}.testAA();
}
}
interface AA
{
void testAA();
}