1.面向对象
特点:
1:将复杂的事情简单化。
2:面向对象将以前的过程中的执行者,变成了指挥者。
3:面向对象这种思想是符合现在人们思考习惯的一种思想。
匿名对象
/**
* @Description
* @ClassName objectDemo
* @Author yangff
* @date 2021.10.13 21:54
*/
class objectDemo2{
private long pid=123456789;
public objectDemo2(){
System.out.println("Person()");
}
public objectDemo2(long pid){
System.out.println("Person(long pid)");
System.out.println("在使用传进来的pid赋值前:pid:"+this.pid);
this.pid = pid;
System.out.println("在使用传进来的pid赋值后:pid:"+this.pid);
}
}
public class objectDemo extends objectDemo2{ //extends 实现继承关系
private String name;
private int age=0;
public objectDemo(){
System.out.println("Student()");
}
public objectDemo(long pid, String name, int age){
super(pid); //调用父类的构造函数一定要写在最前面不然会报错
System.out.println("Student(long pid, String name, int age)");
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public static void main(String[] args){
objectDemo stu1 = new objectDemo();
objectDemo stu2 = new objectDemo(123456,"Sakura",20);
//没有栈指向的对象就叫做匿名对象。
System.out.println(new objectDemo(123456,"Sakura",20).getName());
}
}
成员变量和局部变量的区别:
1:成员变量直接定义在类中。局部变量定义在方法中,参数上,语句中。
2:成员变量在这个类中有效。局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。
构造函数:
用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
该函数的名称和所在类的名称相同。
不需要定义返回值类型。
该函数没有具体的返回值。
构造函数和一般函数区别:
两个函数定义格式不同。
构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数,是对象创建后,需要调用才执行,可以被调用多次。
面向对象特征:封装,继承,多态
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
继承:java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。
好处:提高了代码的复用性。让类与类之间产生了关系,提供了另一个特征多态的前提。
不支持多继承的原因:
因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。
但是java支持多重继承。A继承B B继承C C继承D。
final特点:
1.这个关键字是一个修饰符,可以修饰类,方法,变量。
2.被final修饰的类是一个最终类,不可以被继承。
3.被final修饰的方法是一个最终方法,不可以被覆盖。
4.被final修饰的变量是一个常量,只能赋值一次。
抽象类: abstract
/**
* @Description
* @ClassName abstract_Shape
* @Author yangff
* @date 2021.10.13 22:08
*/
public abstract class abstract_Shape{
//初始化块
{
System.out.println("执行Shape的初始化块");
}
private String color;
public abstract double calPerimeter();
public abstract_Shape(){ }
public abstract_Shape(String color){
System.out.println("执行Shape构造器");
this.color=color;
}
public void setColor(String color){
this.color=color;
}
public String getColor(String color){
return color;
}
}
class abstract_Shape2 extends abstract_Shape{
private double a;
private double b;
private double c;
public abstract_Shape2(String color,double a,double b,double c){
super(color);
this.setSide(a,b,c);
}
public void setSide(double a,double b,double c){
if(a>=b+c||b>=a+c||c>=a+b){
System.out.println("三角形两边之和需要大于第三边");
return;
}
this.a=a;
this.b=b;
this.c=c;
}
@Override
public double calPerimeter(){
return a+b+c;
}
public static void mian(String[] args){
abstract_Shape s1=new abstract_Shape2("黑色",3,4,5);
System.out.println(s1.calPerimeter());
}
}