2021-07-21

instanceof 运算符:用来判断某个对象是否属于某一个类或者接口,如果属于返回true 否则返回false(判断是否是不是子类或者本类)

继承 封装 多态
多态:一个事物的多种形态(继承、重写)
1.父类的引用指向子类的对象
2.继承
3.方法的重写


好处:扩展能力强,简化代码,可读性强、
test.java
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
            Bus bus=new Bus();
            bus.go();
            Taxi taxi=new Taxi();
            taxi.go();
//            以上这不叫做多态,因为已经被写死了
            
            Car c1=new Rocket();//    父类的引用指向子类的对象
            c1.go();
//            Car c2=new Taxi();
//            Car c3=new Metro();

    }

}
父类car.java
package com.neusoft.test2;

public class Car {
public void go(){
    
    
}
}
子类rocket.java
public class Rocket extends Car{
public  void go(){
    
    System.out.println("一秒到火车站");
}
}

工厂设计模式思路(这里拿汽车工厂举例,我们需要汽车类,汽车又分为好几种对象,工厂模式就需要工厂类,再有测试test)
首先,汽车工厂生产汽车,肯定每种汽车都有自己生产的方法,工厂来生产汽车,就一定可以生产所有汽车
这里定义两种汽车作为汽车大类的子类,分别为Benz,BMW,他们有自己的生产方法,去重写汽车大类的生产方法
public class Benz extends Car{
    public void product(){
        System.out.println("奔驰汽车正在生产。。。。。。。。。。");
        
    }
}
public class BMW extends Car{
public void product(){
    
    System.out.println("宝马汽车正在生产。。。。。。。。。");
}
}
汽车大类的方法car
public class Car {
public void product(){
    
}
}
汽车工厂生产汽车CarFactory
public class CarFactory{
public void productCar(Car car)
{
car.product;//运行时多态
}
}
最后使用test去进行测试,首先实例化工厂对象,比如我们要生产benz和bmw两种汽车就需要他们的零件所以也需要实例化这两个对象
接着进行传值
CarFactory carfactory=new CarFactory();
Benz benz=new Benz();//或者写成Car c1=new Benz()也可以,这样下面就可以传c1的值了;
Bmw bmw=new Bmw();
carfactory.productCar(benz);
carfactory.productCar(bmw);//编译时多态

运行时(继承)多态和编译时(方法重载)多态


static  关键字 静态
修饰:成员变量,成员方法,代码片(一块代码,一片代码,就是用{}括起来的代码)

代码片运行先于构造方法

静态代码片只执行一次
static{
        
        System.out.println("这就是代码片");
        
    }

在类被加载的时候,在内存中,有static,类加载器会对其特殊处理,在内存中有一个专门空间叫静态区域,会把static修饰的放在里面。
静态区域里面的只分配一次内存,只开辟一次空间。
静态方法就想到共享
student.java
public class Student {
     static String name;
    public static void func(){
        
    }
    }
Test.java
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
Student s1=new Student();
Student s2=new Student();

Student.name="张三";
s1.age=20;//对象变量
Student.name="李四";//类变量,静态变量,只修饰全局变量
System.out.println(Student.name);
System.out.println(Student.name);
Student s3=new Student();
System.out.println(Student.name);

    }
}
类变量,静态成员变量,只修饰全局变量,用static的变量没有必要做成封装。封装一般都是非静态的数据,
方法也跟上面的一样,也可以是静态的,也可以直接用 类.方法名调用
静态方法只能直接访问静态变量,
非静态方法可以直接访问静态变量和静态资源
public class Student {
//     static
    String name;
     int age;
     static int count=0;
    public static void func(){
//        System.out.println(age);
        System.out.println(count);
    }
    public  void func2(){
        System.out.println(age);
        System.out.println(count);
    }
    
    static{
        
        System.out.println("这就是代码片");
        
    }
    public Student(){
        count++;
        System.out.println("构造方法");
    }
    }
test.java
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
Student s1=new Student();
Student s2=new Student();
Student s3=new Student();
System.out.println(Student.count);//用在计算一共有多少学生
Student.func();
s1.func2();
//Student.name="张三";
//s1.age=20;//对象变量
//Student.name="李四";//静态变量,类变量,只修饰全局变量
//System.out.println(Student.name);
//System.out.println(Student.name);
//
//System.out.println(Student.name);
    }

}


单例模式
单例模式(singleton)是保证一个类仅有一个实例,并提供一个访问它的全局访问点,
单例模式要点包括:
1.某个类只能有一个实例
2.它必须自行创建这个实例
3.必须自行向整个系统提供这个实例 单例模式实现方式为
4.拥有一个私有构造方法
5.提供一个自身静态私有的成员变量
6.提供一个公有的静态方法
student.java
public class Student {

    private static Student student=new Student();//创建本类静态实例
    
    private Student(){}//构造方法私有化
    
    public static Student getstudent(){
        return student;
    }
    
}
test.java
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//        Student s1=new Student();
        Student s1=Student.getstudent();
        Student s2=Student.getstudent();
        System.out.println(s1==s2);
    }

}

final关键字:最终 终态
修饰:类,方法,变量

常量:恒定不变的数据就是常量,用final修饰的变量就是常量
int num=100;(变量)
常量在声明的同时必须要进行初始化
常量的值只能使用不能重新改写
常量所有字母必须全大写

final修饰方法不能被修改如子类继承父类,父类中的有final修饰的方法,子类就不能重写

final修饰类就不能被继承

public static final double PI=3.14;//加static节省空间(每一个对象都开辟一个空间,但是改写不了这个值),

抽象:


抽象类:用abstract 修饰的类就是抽象类,抽象类和普通类没有区别,抽象类比普通化更抽象,
抽象类不能具体化(实例化),抽象类一般都用在继承上,一般的抽象类都加在父类上,在父类上使用抽象类不影响继承
抽象类中不一定含有抽象方法;抽象类可以继承抽象类

不想有任何具体事例和具体实例化操作,构造方法是为了初始化属性存在。没有对象是构造方法调用不了,不能说没有构造方法

抽象方法:用abstract 修饰的方法就是抽象方法
方法由方法的声明和具体实现构成(大括号分界线)
public abstract void test();只有方法的声明,没有方法的实现。抽象方法都靠继承和方法重写来实现的

含有抽象方法的类必须是抽象类,子类必须重写父类的抽象方法
public abstract class Car {
public  abstract void go();
}

public abstract class A {
    public static final double PI=3.14;
    public abstract void test();
}

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值