JavaSE自学笔记Real_004

JavaSE自学笔记Real_004

封装

Private get set

public class Fengzhuang {
    public static void main(String[] args) {
        //========================================
        //封装
        //========================================
        /*
        1、提高了程序的安全性,保护数据
        2、隐藏代码的实现细节
        3、统一接口
        4、系统的可维护性提高
         */

        Student s1 = new Student();
        s1.setName("张三");
        System.out.println(s1.getName());
    }
}
//类 private:私有
public class Student {
    //属性表示
    private String name; //名字
    private int id; //学号
    private char sex; //性别

    //提供一些可以操作这个属性的方法
    //提供一些public的get、set方法

    //get 获取这个数据
    public String setName(){
        return this.name;
    }

    //set 给这个数据设置值
    public void setName(String name){
        this.name = name;
    }
}

继承

 //=======================================
        //继承
        //=======================================
        /*
        继承的本质时对某一批类的抽象,从而事项显示世界更好的建模
        extends的意思是扩展,子类是父类的扩展
        Java中类只有单继承,没有多继承

        继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等
        继承关系的两个类,一个为子类(派生类),另一个为父类(基类)。子类继承父类,使用关键字extends来表示
        子类和父类之间从意义上讲应该具有“is a”的关系
         */

        //属性的修饰词:
        //public  protected  default  private
        //在java种所欲的类都默认直接或间接继承Object这个类
- super关键字与this关键字
/*
super注意点:
    1、super调用父类的构造方法,必须在构造方法的第一个
    2、super必须只能出现在子类的方法或者构造器中
    3、super和this不能同时调用构造方法
比较
this:
    代表的对象不同:
        this:本省调用者这个对象
        super:代表父类对象的应用
    前提:
        this:没有继承也可以使用
        super:只能在继承条件下才可以使用
    构造方法:
        this():本类的构造
        super():父类的构造
 */

public class Application {
    public static void main(String[] args) {
        Students students = new Students();
        students.test("王五");
        students.test1();
    }
}




//==================================================================
//在Java中,所有的类,都默认直接或简介继承Object
//HumanBeing 人:父类
public class HumanBeing {
    //无参构造器
    public HumanBeing(){
        System.out.println("HumanBeing无参构造执行了");
    }

    protected String name = "张三";

    //private私有关键字修饰的属性或方法无法被子类调用

    public void print(){
        System.out.println("Person");
    }
}





//================================================================
//学生 is 人:派生类  子类
//子类继承了父类,就会拥有父类的全部方法
public class Students extends HumanBeing{
    //无参构造器
    //默认先执行父类的无参构造器,再执行子类的无参构造器
    public Students(){
        System.out.println("Students无参构造执行了");
    }

    private String name = "李四";

    public void print(){
        System.out.println("Student");
    }

    //使用Super关键字可以调用父类的静态属性
    public void test(String name){
        System.out.println(name);
        System.out.println(this.name); //输出自己的name即李四
        System.out.println(super.name); //输出父类的name即张三
    }

    //使用super还可以调用父类的动态方法
    public void test1(){
        print();
        this.print();
        super.print();
    }
}

- 重写
/*
重写:需要有继承关系,子类重写父类的方法
    1、方法名必须相同
    2、参数列表必须相同
    3、修饰符:范围可以扩大,但是不能缩小:public>protected>default>private
    4、抛出的异常:范围可以缩小,但是不能扩大:ClassNotFundException --> Exception(大)

重写,子类的方法和父类的方法名必须要一致,方法体不同

为什么要重写:
    1、父类的功能,子类不一定需要,或者不一定满足
    2、Alt+Insert:override
 */


public class Application1 {
    public static void main(String[] args) {
        //方法的嗲用只和左边还有定义的数据类型有关
        A a = new A();
        a.test();  //A
        //父类的引用指向子类(里氏转换)
        B b = new A();
        b.test();  //B

        //非静态方法
        a.test1();
        b.test1();

    }
}



//================================================================
public class A extends B{
    //静态方法
    public static void test(){
        System.out.println("A=>test()");
    }

    //非静态方法
    public void test1(){
        System.out.println("A=>test1()");
    }


}


//===============================================================
public class B {
    //静态方法
    public static void test(){
        System.out.println("B=>test()");
    }

    //非静态方法
    public void test1(){
        System.out.println("B=>test1()");
    }
}

多态

import com.NUST.Demo004.Person;
import com.NUST.Demo004.Student;

/*
多态:
    即同一个方法可以根据发送对象的不同二采用多种不同的行为方式
    一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多

多态注意事项:
    1、多态是方法堵塞多态,属性没有多态
    2、两个类之间需要有继承关系才能进行类型转换,富则会报错:ClassCastException
    3、多态存在的条件:有继承关系,方法需要重写,父类引用指向子类对象,Father f1 = new Son();
    4、以下修饰词的方法不能被重写:
        (1)static方法:属于类本身,不属于实例
        (2)final 常量
        (3)private 方法属于父类实例私有
 */

public class Application2 {
    public static void main(String[] args) {
        //多态
        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //父类的引用指向子类,若子类没有重写父类的方法,则执行父类的方法
        //若子类重写了父类的方法,则执行子类的方法

        //可以指向的引用类型就不确定的:父类的引用指向子类
        Student s1 = new Student();
        Person s2 = new Student();
        Object s3 = new Student();

        //子类会重写父类的方法,执行子类的方法
        s2.run(); //son
        s1.run(); //son
    }
}


//==============================================================
public class Person {
    public void run(){
        System.out.println("run");
    }
}

//=============================================================
public class Student extends Person{
    public void run(){
        System.out.println("son");
    }
}

- instanceof关键字与类型转换

import com.NUST.Demo004.Person;
import com.NUST.Demo004.Student;
import com.NUST.Demo004.Teacher;

import java.util.Scanner;

public class Application2 {
    public static void main(String[] args) {
        //=========================================================
        //instanceof关键字
        //=========================================================
        //Object > String
        //Object > Person > Teacher
        //Object > Person > Student
        Object object = new Student();

        System.out.println(object instanceof Student); //true
        System.out.println(object instanceof Person); //true
        System.out.println(object instanceof Object); //true
        System.out.println(object instanceof Teacher); //False
        System.out.println(object instanceof String); //False

        System.out.println("==============================================");

        Person person = new Student();
        System.out.println(person instanceof Object); //true
        System.out.println(person instanceof Person); //true
        System.out.println(person instanceof Object); //true
        System.out.println(person instanceof Teacher); //False
        //System.out.println(person instanceof String);  //

        //===============================================================
        //类型之间的转换
        //===============================================================
        /*
        1、父类引用指向子类的对象
        2、把子类转换为父类,向上转换:直接就能转换  可能会丢失子类的一些方法
        3、把父类转换为子类,向下转换:必须进行强制转换
        4、方便方法的调用,减少重复的代码
         */
        //   高    ->       低
        Person obj = new Student();

        //student将这个对象转换为Student类型,我们就可以使用Student类型的方法了
        Student student = (Student) obj; // 简写:((Student)obj).go();
        student.go();
    }
}

//=====================================================================
public class Person {
    public void run(){
        System.out.println("run");
    }
}

//====================================================================
public class Student extends Person{
    public void go(){
        System.out.println("go");
    }

}


//===================================================================
public class Teacher extends Person{
}

抽象类(abstract)

//abstract 关键字表示抽象类 extends只能单继承, (但是接口可以多继承)
public abstract class Action {
    //如果有一个方法是不必要的但是必须要写的,太麻烦,可以让别的类帮忙把这些都写了
    //abstract 抽象方法  只有方法的名字即可。没有方法的实现
    public abstract void doSomething();

    //1、抽象类不能进行实例化,也就是不能用new关键字,只能用子类来实现它
    //2、抽象类里面可以写普通的方法
    //3、一个类里面由抽象方法,那么这个类就必须设置为抽象类
}

接口

/*
接口的作用:
    1、它是一种约束
    2、定义了一些方法,让不同的类进行实现
    3、接口的方法的修饰符都是:public abstract
    4、接口里面的变量的修饰符都是:public static final
    5、接口不能被实例化
    6、implement可以实现多个结成,相当于多继承
    7、必须要重写接口中的方法
 */


//抽象类 extends只能单继承
//类 可以实现接口 implement 接口
//实现接口的类必须要重写接口中的方法
//接口从另一种角度实现了多继承
public class UserServiceImpl implements UserService, TimeService{

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timerScan() {

    }
}

//==========================================================
//接口的基础学习==============================
//interface 定义接口的关键字
public interface UserService {
    //接口中的所有定义其实都是抽象的  public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}


//======================================================
public interface TimeService {
    void timerScan();
}

内部类

public class Application4 {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //通过这个外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        inner.in();
    }
}

//==================================================
public class Outer {
    private int id;
    public void out(){
        System.out.println("这是外部类的方法");
    }

    public class Inner{
        public void in(){
            System.out.println("这是内部类的额方法");
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仲子_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值