Javase基础总结一

面向对象的三/四大特征

封装
体现形式:方法、属性的私有化、内部类
属性的私有化:将属性用private修饰,然后提供对外的访问(getXXX)和设置(setXXX)的方法,在方法中进行限定,使属性值更加符合的场景要求
优势:提高代码的复用性,保证数据的合法性
继承
发现一些类中的属性和方法是相同的,所以把这些相同的属性和方法提取到一个新的类中,然后利用extends关键字让原来的类和新的类产生联系,这种联系称之为继承。
子类通过继承可以使用父类中的一部分方法和属性。
注意: 子类在继承父类的时候继承了父类全部的数据域(属性、方法),但是虽然是继承了父类全部的数据域,但是只有一部分的数据域对子类可见(父类对象中设置为私有的属性和方法,子类拥有却无法访问)
在Java中,支持的是单继承—一个子类只能继承一个父类,一个父类可以有多个子类
多继承与单继承的优劣性比较:
多继承比单继承能更好的提高代码的复用性
单继承相对多继承而言,能明确方法的调用,优点:提高代码的复用性,避免方法的调用产生混乱
super关键字
super在子类中表示父类对象的引用,可以认为是一个虚拟对象,和上面的this有异曲同工之效,都是一个虚拟的对象,只是this代替本类对象来调用本类中的属性和方法,而super则是在子类中调用父类对象
在子类中,通过super来调用父类中的方法和属性
super语句
— 表示在子类的构造方法中调用父类对应形式的构造方法来创建一个父类对象。
— 如果没有手动指定super语句,那么在编译的时候会自动添加一个super()
— 如果父类只提供了含参构造,那么在子类的构造方法中必须手动提供对应形式的super语句
– super语句必须放在子类构造方法的第一行
多态
实现条件:
深层次:Java虚拟机内存分布 people p = new people(); 注意画图流程
静态绑定:重载 条件:相同作用域 方法名相同,参数列表不同
动态绑定:重写 条件:父子类,子类重写父类方法 同名同参,注意修饰符问题 重写的原理就是地址覆盖
编译时多态:方法的重载
运行时多态:向上造型、方法的重写 — 基于继承
*实现原理:*继承关系 实现关系
注意:利用向上造型创建的对象,能干什么看的是父类;具体的执行看到是子类
抽象(可说可不说)
忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,而是过程抽象.
数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

final关键字

基本用法:修饰类,变量,方法
修饰类: 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
修饰方法:。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率,父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。
修饰变量: final成员变量表示常量,只能被赋值一次,赋值后值不再改变。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。且final修饰一个成员变量(属性),必须要显示初始化。
扩展:
类的final变量和普通变量有什么区别?
* 当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
被final修饰的引用变量指向的对象内容可变吗?
* 引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

static关键字

基本用法
1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来
2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来
被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。
静态资源的好处:
1、不同的类有自己的静态资源,这可以实现静态资源分类。
2、避免重名。
3、避免静态资源类无限膨胀。
加载时候的问题:
1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。
2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。
3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。
静态块
静态块也是static的重要应用之一。也是用于初始化一个类的时候做操作用的,和静态变量、静态方法一样,静态块里面的代码只执行一次,且只在初始化类的时候执行。
结论:
静态资源的加载顺序是严格按照静态资源的定义顺序来加载的。
静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。
静态代码块是严格按照父类静态代码块->子类静态代码块的顺序加载的,且只加载一次。

原文访问:
https://www.cnblogs.com/swisszhang/p/9892992.html

访问限定符:

在这里插入图片描述
public :公共权限 可以修饰类,构造方法,数据成员,方法成员

可以被同一个类里面的其他类访问;可以被同一个包下的类访问;可以被不同包下的类访问;不管是同一包还是不同包下的子类也可以访问

private:私有权限 可以修饰构造方法,数据成员,方法成员,除外部类的其他类

可以被同一个类里面其他类访问;不能被同一包下的类访问;不能被不同包下的其他类访问;不管事同一个包下的子类还是不同包下的子类也都不可以访问

protected:受保护权限 修饰数据成员,构造方法,方法成员,除外部类的其他类

可以被同一个类里面的其他类访问;可以被同一个包下的类访问;不能被不同包的类访问;如果有不同包的类想调用它,那么这个类只能是定义了它的类的子类

default:默认权限

可以修饰类,构造方法,数据成员,方法成员;可以被同一个类里面的类访问;也可以被同一个包里面的类访问;但是不能被不同包下的类访问,不管是子类还是非子类
四种访问限定修饰符的大小为:public>protected>default>private

重载重写区别:

重写:
从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

class father{
    public void say(){
        System.out.println("hello");
    }
}
class  son extends father{
    @Override
    public void say() {
        System.out.println("Sayhello");
    }
}

总结:
1.发生在父类与子类之间
2.同名同参
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
重载
在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

public class demo9 {
    public static void main(String[] args) {
        demo9 s = new demo9();
        s.say();
        s.say("wangwu");
    }
    public void say(){
        System.out.println("hello");
    }
    public void say(String name){
        System.out.println("hello"+" "+ name);
    }
}

总结:
1.重载Overload是一个类中多态性的一种表现
2.同名不同参,返回值无关
重载(Overload)和重写(Override)的区别?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值