类与对象

一,类(class):(是对象的抽象,可以说是一个模板)

1.类的定义:

Class
类名称{

属性1;

属性…;

方法1(){}

方法n(){}…….

}

例:

   class Person {

public String name; //属性

public int age;



public Person(String name, int age) {  //方法

    this.name = name;

    this.age=age;

}  }

2.内部类:所谓内部类就是在一个类的内部进行其他类结构的嵌套的操作

例:

class Outer{

private int age=10;

class Inner{  //定义一个内部类

    public void print(){              System.out.println("age");  //调用age属性

    }}}

(1)成员内部类(实例内部类):

例:

   class Innerclass{

 public int data=10;

 public Innerclass(){

    System.out.println("Innerclass.init()");
  }}

A.不能存在static的变量和方法。

B.依附于外围类,只有先创建了外围类才能够创建内部类。

C.实例内部类对象有额外的内存消耗,实例内部类拥有外层内部类的this引用。

(2)静态内部类(使用static修饰为静态内部类):

例:

 class Inner {

    static class print() {  //定义一个内部类        }}

A.创建是不需要依赖于外围类,可以直接创建。

B.不能使用任何外围类的非static成员变量和方法,而内部类则都可以。

C.静态内部类可以访问外部类的实例数据成员。

(3)方法内部类(定义在外部类的方法中)

例:

class Outer{public void display(int test){

class Inner{  //方法内部类

}}}
(4)匿名内部类(没有名字的方法内部类)

例:匿名内部类的使用

 interface A {

void test();

}

class Outter{

private int num;

public void display(int p){

    new A(){



        @Override

        public void test() {

            System.out.println("匿名内部类"+p);

        }

    }.test();

}

}
public class Demo3{

public static void main(String[] args) {

    Outter outter=new Outter();

    outter.display(20);

}

}

注意:A.匿名内部类是没有访问修饰符的。

B.匿名内部类必须继承一个父类或者实现一个接口,但最多只能有继承一个父类或者实现一个接口,而且必须实现接口或者父类里的所有抽象方法。

C.匿名内部类中不能存在任何静态成员或方法。

D.匿名内部类没有类名,不能定义构造器。。

E.如果匿名内部类需要访问外部类的局部变量,则需要使用final修饰符来修饰外部类的局部变量

F.匿名内部类不能是抽象类。

二,对象(object):(或被称为实例:instance是一个具体存在的实体)

例:

class Person {

String name;

int age;

}

 public class Demo1 { 

public static void main(String[] args) { 

    Person p=new Person();

    p.name="bit";

    p.age=10;

            }

}

在上述的代码中“Person p=new Person();”

创建了一个Person实例,称为Person对象,这个Person对象被赋值给p变量。

在这里插入图片描述
在这里插入图片描述

1.对象的产生(分为两步):A.为对象开辟内存
B.调用合适的构造函数(构造函数不止一个)
2.初始化对象:
类名称
对象名称=new 类名称();

3.对象属性的初始化方式:A.提供一系列的get和set方法
B.提供合适的构造函数
C.静态代码块和实例代码块

三,面向对象的三大特征:

1.封装:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

使用private实现封装:让内部操作对外部不可见。

例:

private String name;

private int age;

要访问私有属性:

getter方法:主要用于进行属性内容的设置和修改

setter方法:主要用于属性内容的取得

2.继承:

继承的实现:使用extends关键字实现:

修饰符class子类extends父类{

//类定义的部分

}

例:

public class Fruit {

public double weight;

public void info()

{

    System.out.println("我是一个水果!重"+weight+"g!");

}

}

 class Apple extends Fruit{

public static void main(String[] args) {

    Apple a=new Apple();

    a.weight=56;

    a.info();

}

}

作用:对类进行扩充以及代码的重用。

注意:java不允许多重继承,每个类最多只有一个直接父类,但是允许多层继承。

子类对象的实例化流程:不管如何操作,一定要先实例化父类对象。

例:多重继承会引起编译错误:

class Sclass extends B1,B2...{....} //是错误的

3.多态:

基类引用派生类对象,并且基类和
派生类有同名的重写方法。

四,覆写(override)和重载(overload):

注意:由final关键字修饰的方法被称为密封方法,不能发生覆写。

在这里插入图片描述

五,向上转型和向下转型:

1.向上转型(运行时多态)。

2.向下转型:要进行强制类型转换而且前提是要先进行向上转型。

六, this关键字:

(1)this调用本类属性。

(2)this调用本类方法。

(3)this表示当前对象。

七,super关键字:

Super(参数列表); //调用基类的构造函数(必须放在派生类构造函数的第一行)

Super.data(); //访问基类的属性

Super.func(); //调用基类的成员函数

八,final关键字:

A.可以修饰类,方法,属性。

B.final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。

C.使用其定义的类不能有子类。

例:

  final  class  A{}   //A类不能有子类

D.final一旦修饰一个类后,该类的所有方法默认都会加上final修饰(不包含成员变量)。

E.使用final修饰的方法不能被子类重写,若发生重写将引发编译错误。

例:

class  A{  public final void fun(){}//fun方法不能被重写}

使用final修饰的方法可以被重载:
例:

public class A{

    public final void test(){}

    public final void test(String[] args){}

    }

F.使用final修饰的变量,在定义该final变量时就指定了初始值,在编译时就被确定下来,不能被修改。

例:

 final int a = 5; //a不能被修改

G.定义常量(public static final),常量全用大写字母,多个单词间以“_”分隔。
例:

Public static final int MAX_AGE=120;

九, 四种访问权限:Public==>protected==>包访问权限==>private

十,代码块:

1.普通代码块:定义在方法中的代码块。

2.构造块:定义在类中的代码块(不加修饰符)。

构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块,构造快可以进行简单的逻辑操作(在构造方法前)。

3.静态块:使用static定义的代码块。根据静态块所在的类不同分为两种类型:。

在非主类中:(1)静态块优先于构造块执行。
(2)无论产生多少个实例化对象,静态块都只执行一次。
(3)静态块的主要作用是为static属性进行初始化。

在主类中:在主类中的定义的代码块,优先于主方法(main)执行。

4.同步代码块。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值