面向对象(总结)

成员变量:类中方法外的变量 (成员变量在堆内存中,随对象存在而存在)

局部变量:方法中的变量        (局部变量在栈内存中,随着调用完毕而消失)


封装:

合理暴露,合理隐藏,好处是安全性、复用性

this:

this关键字代表当前对象,通常用于区分成员变量和方法中的局部变量;修饰的变量用来指代成员变量 

构造方法:

分为有参和无参构造两种,推荐都写上(如果没定义构造方法,系统将给出一个默认的无参数构造方法,如果定义了,还要使用无参构造,就必须再写一个无参构造)

修饰类:

public:项目在任何地方都可以访问

protected:同包下任意类包括其子类

private:只能自身访问(不允许外部程序直接访问,通过get/set方法访问)

package-access(缺省):同包下任意类

equals:

char[] chars={'a','b','c'};
String str1=new String(chars);
String str2=new String(chars);
String str3="abc";
String str4="abc";
System.out.println(str1==str2); //false
System.out.println(str1==str3); //false
System.out.println(str3==str4); //false
System.out.println(str1.equals(str3)); //false
System.out.println(str3.equals(str4)); //false

StringBuilder:

对字符串进行拼接操作每次拼接都会构建一个新的String对象,耗时又浪费内存空间,而StringBuilder是可变的字符串类。

包含了增加、改、反转等操作,如下:

public static void main(String[] args) {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("hello");
        stringBuilder.append("world");
        System.out.println(stringBuilder);//helloworld
        stringBuilder.append("hi").append("hi");
        System.out.println(stringBuilder);//helloworldhihi
        stringBuilder.replace(0,4,"aaaa");
        System.out.println(stringBuilder);//aaaaoworldhihi
        StringBuilder stringBuilder1=new StringBuilder();
        stringBuilder1.append("hello").reverse();
        System.out.println(stringBuilder1);//olleh
}

 String和int互转:

int->String:String str=String.valueOf(num);

String->int: int a=Integer.parseInt(str);

String和StringBuilder互转:

public String toString()

public StringBuilders(String s)

StringBuilder sb=new StringBuilder();
sb.append("hello");
String s=sb.toString();
System.out.println(s);   //hello
StringBuilder str=new StringBuilder(s);
System.out.println(str); //hello

继承:

可使得子类具有父类(超类、基类)的属性和方法,还可以在子类中重新定义,追加属性和方法

格式:public class 子类名 extends 父类{}

有类不一定有对象,有对象一定有类;static属于类的东西,非static属于对象的东西

所有类的父类都是Object,Object的能重写的方法都可以被重写(equals、hashCode、toString)

类中可声明内容:

静态初始化器、实例初始化器、构造方法、成员变量、成员方法、成员类、成员接口

关与可不可被继承:

同包下,可被继承的有非private的1成员(变量、方法、成员类、成员接口等)

不同包下,可被继承的有public及protected修饰的成员(变量、方法、成员类、成员接口等)

一定不能被继承的有静态初始化器、实例初始化器、构造方法、私有属性、私有方法、私有成员类、私有成员接口等。

继承的优缺:

好处:提高复用性(多个类相同的成员可以放在同一个类中)

          提高维护性(需要修改、改一处即可)

弊端:削弱了子类的独立性

继承中变量访问特点:在子类中访问一个变量:1.子类局部范围 2.子类成员范围 3,父类成员范围

this和super的区别:

1.this指代当前对象,super指代父类对象

2.this可以解决变量遮蔽问题,super解决隐藏问题

3.this调用属性或方法时,本类没有可以调用父类的;super调用父类的属性或方法

4.this可以在任何类中使用;super出现在子类中

5.都只能在实例方法、构造方法或实例初始化器中使用

6.都可以表示构造方法的调用,并且只能在构造方法的第一行,不能同时出现;如果子类构造中调用父类无参构造方法时,super可省略。

继承中构造方法的访问特点:

子类中所有的构造方法默认都会访问父类中无参的构造方法:

因为子类先会继承父类的数据,可能还会使用父类的数据,所以子类初始化前先完成父类数据初始化。

每个子类构造方法的第一条语句默认:super();

如果父类中没有无参构造,只有带参构造:通过super关键字去显示的调用父类的带参构造方法;

在父类中自己提供一个无参构造方法(推荐:自己给出无参构造)

方法重写:

概述:子类中出现了和父类一样的方法声明

应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样即沿袭了父类功能,又定义了子类内容

注意:私有方法不能被重写(父类私有成员,子类不能继承)

类只支持单继承,支持多层继承

final关键字:

修饰方法:表明该方法是最终方法,不能被重写(可被继承)

修饰变量:表明该变量是常量,就不能被再次赋值

修饰类:表明该类是最终类,不能被继承

static关键字:

1.static表示静态的,可以用来修饰类、接口、方法、字段和代码块

2.使用static修饰的是静态,属于类,多个实例(对象)之间共享;没有static修饰的是非静态的,属于实例。

3.static修饰的成员都可以使用类名直接调用(推荐),也可以通过对象名调用。static成员直接可以相互访问,但不能访问实例成员。实例成员可以访问static成员。

4.类首次加载的时候,会初始化static成员。

重载和重写的区别:

1.在同一类中,存在方法名相同,参数列表不同(顺利、个数、类型)的方法称为重载。

2.在继承关系中,子类声明一个继承父类的方法名相同、参数列表相同、返回值类型一致、访问修饰符相同或变大、抛出异常相同或缩小的方法称为重写。

3.重载是编译时多态,重写是运行时多态。


多态:

概述:同一对象在不同时刻表现出的不同形态

public class Animal{
    public int age=20;
    public void eat(){
        System.out.println("动物吃东西");
    }
}
//-----------------------------------------
public class Cat extends Animal{
    public int age=10;
    public int weight=30;
    public  void eat(){
        System.out.println("猫吃鱼");
    }
    public void play(){
        System.out.println("玩毛线");
    }
}
//-----------------------------------------
public class Test {
    public static void main(String[] args) {
        Animal a=new Cat();
        System.out.println(a.age);//20
        a.eat();
        //a.play();
    }
}

多态的优缺:

优:提高程序的扩展性

缺:不能使用子类的特有功能

多态的转型:

1.向上转型:从子到父,父类引用指向子类对象 ——>Animal a=new Cat();

2.向下转型:从父到子,父类引用转为子类对象 ——>Cat a=(Cat)a;

向下转型解决了不能使用子类特有功能的弊端

多态的形式:

抽象类多态、接口多态、具体类多态(前两个为重)

父类对象引用指向子类对象实例,调用方法是具体看属于哪个对象(运行时多态)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值