首页 > 代码库 > 自学java基础(三)

自学java基础(三)

 

 

 

 

1、面向对象程序设计的三大基本特种:封装,继承,多态。

    封装:将数据和方法放在一个类中。

2、定义类:

修饰符 class 类的名字
{
   类的内容
}

  定义方法:(方法定义不能嵌套,不能在一个方法中定义另一个方法。)

修饰符 返回值类型 方法名字([参数1,参数2,参数n])
{
  方法体;
}

生成对象:

public class Person
{

}
Person p1 =  new Person();

例子:

public class Test
{
    //两个整数相加的方法
    public int add(int a, int b)
    {
        return a + b;
    }

    //两个整数相减的方法
    public int subtract(int a, int b)
    {
        return a - b;
    }

    //两个整数相乘的方法
    public int multiply(int a, int b)
    {
        return a * b;
    }

    //两个整数相除的方法
    public int divide(int a, int b)
    {
        return a / b;
    }

    //使用void关键字表示方法不返回值
    public void output()
    {
        System.out.println("Hello World");
    }

    public static void main(String[] args)
    {
        Test test = new Test();

        int x = 8;
        int y = 3;
        
        int a = test.add(x, y);
        int b = test.subtract(x, y);
        int c = test.multiply(x, y);
        int d = test.divide(x, y);

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

        test.output();
            
    }
}

 

3、引用类型。一个对象可以被多个引用所指向,同一时刻同一个引用只能指向一个对象。多个引用同时指向一个对象,那么无论哪一个引用改变对象的成员变量,都会反映在其他的引用上。

     如果一个类中包含了属性和方法,那么该类生成的每一个对象都维护一个自己的对象,但同时拥有同一个方法。

 

public class People{
  int age=20;
  public void change(People people){
   people=new People();
   people.age=30;
   System.out.println(age);//20
   System.out.println(people.age);//30
}
  public static void main(String[] args){
   People people=new People();
   int age =people.age;//传递的是原生数据类型,直接赋值。
   System.out.println(age);//20
   people.change(people);
   int age2=people.age;
   System.out.println(age2);//20
}
}

 

 技术分享

4、构造方法:用于完成对象的初始化。

    特点:一:名字必须与类名相同。二:没有返回值,也不能出现void。三:若类中没有构造方法,java默认添加为空的构造方法。若声明了构造方法,则java编译器就不会再添加构造方法。四:通过new隐式调用

    new生成对象的三步:为对象开辟内存空间,调用类的构造方法,将生成对象的地址返回。

public class ParamTest
{
    public static void main(String[] args)
    {
        Person person = new Person();

        person.change(person);

        int age = person.age;//20

        System.out.println(age);

        int i = 10;

        person.change2(i);

        System.out.println(i);//10
        System.out.println(person.age);//40
        System.out.println(age);//20
    }
}

class Person
{
    int age = 20;

    public void change(Person person)
    {
        person = new Person();
        
        person.age = 30;
    }

    public void change2(int age)
    {
        this.age = 40;
    }
}

 

8,、构造方法重载:只需要看参数。如果在一个构造方法中调用另外一个构造方法,可以使用this()的方式调用。this()括号中的参数代表目标构造方法的参数。this()必须作为构造方法的第一句。

public class ConstructorOverload
{
    public ConstructorOverload()
    {
        this(3);
        
        System.out.println("test");
    }

    public ConstructorOverload(int i)
    {
        System.out.println(++i);
    }

    public static void main(String[] args)
    {
        ConstructorOverload col = new ConstructorOverload();


    }
}
//4 test

 

 

9、继承。java是单继承。生成子类对象时,java默认首先调用父类不带参数的构造方法,生成父类对象,然后调用子类构造方法,生成子类对象。

public class InheritenceTest3
{
    public static void main(String[] args)
    {
        Son son = new Son();
    }
}

class Grandpa
{
    public Grandpa()
    {
        System.out.println("grandpa");
    }
}

class Father extends Grandpa
{
    public Father()
    {
        System.out.println("father");
    }
}

class Son extends Father
{
    public Son()
    {
        System.out.println("son");
    }
}
//grandpa  father  son

 

 

10、super关键字,表示对父类对象的引用。可以使子类调用父类带参数的构造方法,必须放在第一行(目的是保证先生成父类对象)。

      当父类没有无参的构造方法的时候,必须使用super关键字显示调用父类的构造方法。

public class InheritenceTest2
{
    public static void main(String[] args)
    {
        Dog dog = new Dog();
        dog.run();
    }    
}

class Animal
{
    public void run()
    {
        System.out.println("animal is running");
    }
    public void run(int i)
    {
        System.out.println("animal is sleepping");
    }
}

class Dog extends Animal
{
    public void run()
    {    
        System.out.println("dog is running");
        super.run(1); //调用父类的run方法
    }
}
//dog is running
animal is sleepping

 

自学java基础(三)