Java面向对象编程总结

知识点

  • 面向过程与对象的区别:
    面向过程:编程范式-c-行为
    面向对象:能对现实生活的抽象

  • 面向对象的三大特征:
    a.封装
    将客观事物封装为抽象的类,并且类可以吧自己的数据和方法只让可信的类或对象操作,最不可信的进行信息隐藏。内部操作对不可信外部而言不可见(保护性)。
    b.继承
    指可以使用现有类的所有功能,并且在无须重复编写原有类的情况下对原有类进行功能上的拓展(可重用)。
    c.多态
    一个类实例的相同方法在不同情形下有不同的表现形式。
    多态机制使得具有不同内部结构的对象可以共享外部相同的接口。

  • OOA:面向对象分析
    OOD:面向对象设计
    OOP:面向对象编程

类与对象的定义与使用

  • 类:共性的概念
    对象:具体的事物
    现有类(类是生产对象的蓝图),之后才可以产生对象。对象所具有的所有属性和行为,一定是在类中进行了完整的定义。

  • 类的组成
    方法:构造方法,普通方法
    属性:

this关键字

a. this调用本类属性
规范:在类的普通方法中访问本类属性,一定要加this关键字
b. this调用本类方法
调用普通方法:this.方法名称(参数)
调用构造方法: this(参数)
注意:this调用本类其他构造方法必须放在首行调用(编译错误)
this调用构造方法不允许成环
( 编译错误)
c. this表示当前对象

class Person{
    public void print(){
        //this表示当前对象
        System.out.println("【person类的print方法】:"+this);
    }
}
public class Test {
    public static void main(String[] args) {
        Person per1=new Person();
        per1.print();
        System.out.println("【main】方法中"+per1);
        System.out.println("=======");
        Person per2=new Person();
        per2.print();
        System.out.println("【main】方法中"+per2);
    }
}

static关键字

  • static属性(类属性)—通过类名调用
    访问static属性应该使用类名称.属性名—描述共享概念
    所有的非static属性(实例属性)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制。
    static属性有默认值
class ChinaPerson{
   public String name;
   //类属性
   public static String country="中华民国";
   public void getInfo(){
       System.out.println("姓名为"+this.name+"国家为"+this.country);
   }
}
public class Test {
    public static void main(String[] args) {
        Person per1=new Person();
        per1.name="张三";
        ChinaPerson.country="中国";
       // per1.country="中国";
        per1.getInfo();
        Person per2=new Person();
        per2.name="李四";
        //per2.country="中华民国";
        per2.getInfo();
    }
}

  • static方法(类方法)

与对象实例化无关,通过类名直接调用,常见于工具类方法
1.静态方法不能访问类中普通属性(编译错误)
2.普通方法可以访问静态属性

代码块

  • 定义:使用{}定义的一种代码
    根据代码块出现的位置以及关键字不同,分为四类代码块:
    a.普通代码块:
    定义在方法中的代码块,解决变量中方法重命名问题
    作用域不同
public class Test2 {
    public static void main(String[] args) {
        //int data=20;//(编译错误)
        {
            //普通代码块
            int data=10;
            System.out.println(data);
        }
        int data=20;
        System.out.println(data);
    }
}

b.构造块
定义在类中的代码块(不加任何修饰符)
当有对象产生时,构造块优先于构造方法执行,产生几个对象,就调用几次构造块。
作用:在构造方法执行之前进行一些初始化操作。

class PerSon{
    public PerSon(){
        System.out.println("1.person类的构造方法");
    }
    {
        //构造块
        System.out.println("2.person类的构造块");
    }
}
public class Test2 {
   public static void main(String[] args) {
       new PerSon();
       new PerSon();
   }
}

在这里插入图片描述

c.静态代码块
在类中使用static关键字定义的代码块
1.非主类的静态代码块
静态代码块在类加载时被调用,优先于构造块,不管产生多少实例化对象,只会被调用一次。
2.主类中的静态代码块
主类中的静态代码块优先于主方法执行
在这里插入图片描述
d.同步代码块(多线程)

继承

  1. 继承的限制
    1.子类实例化前先调用父类构造方法产生父类对象后再调用子类构造
    2.Java只允许单继承,不允许多继承
    3.在进行继承的时候,子类会继承父类的所有结构(包含私有属性,构造方法,普通方法)。
    显示继承(可以直接调用):父类中的所有非私有操作。
    隐式继承(必须通过其他形式调用,getter,setter,不能直接调用):父类中的所有私有操作。
  2. 方法重写
    被覆写的方法不能拥有比父类更为严格的访问控制权限。
    方法覆写不能出现private关键字,隐式继承的方法无法被覆写。
    判断当前方法调用的是哪个类的方法:
    1.当前使用的对象是通过哪个类new的
    2.调用的方法是否被子类所覆写,如果被覆写,则调用的一定是子类所覆写后的方法。
方法重载和方法重写区别

1.概念上
2.范围上
3.权限要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值